Как создать новый подсписок из списка, длина которого зависит от другого списка

Я хотел бы создать новый список с подсписками внутри, длина которых зависит от другого списка, например, у меня есть:

a = [1,3,2,5,4]
b = ['a','b','c','d','e','f','g','h','i','l','m','n','o','p','q']

и я хотел бы иметь вложенный список вида:

[['a'],
 ['b', 'c', 'd'],
 ['e', 'f'],
 ['g', 'h', 'i', 'l', 'm'],
 ['n', 'o', 'p', 'q']]

person Giovanni Primativo    schedule 29.12.2018    source источник
comment
Это были не списки, это были кортежи. Я отредактировал ваш вопрос. Пожалуйста, позаботьтесь о том, чтобы ваш вопрос был, по крайней мере, последовательным.   -  person cs95    schedule 29.12.2018
comment
Теперь, когда это не так, было бы здорово увидеть или услышать о том, что вы пробовали?   -  person cs95    schedule 29.12.2018
comment
большое спасибо! на самом деле мне ничего не удалось сделать, потому что я действительно новичок. я нашел только решения, в которых длина подсписков была фиксированной и не зависела от другого списка!   -  person Giovanni Primativo    schedule 29.12.2018
comment
Пожалуйста, поймите, что домашнее задание — это ваша проблема, а не наша. Если вы не готовы платить нам за наше время или как-то делиться с нами своей оценкой, пожалуйста, по крайней мере, будьте готовы приложить эти первоначальные усилия, прежде чем сдаваться и пытаться обмануть свой путь к решению. Любое решение, которое я предложил бы вам сейчас, не только не помогло бы вам, но и помешало бы вашему обучению, потому что вы будете верить, что любую домашнюю задачу можно решить бесплатно, без каких-либо усилий с вашей стороны. Вы ничему не научитесь, и все проиграют.   -  person cs95    schedule 29.12.2018
comment
Самое меньшее, что вы можете сделать, это хотя бы поискать в Google похожие проблемы, чтобы узнать, как они решаются, а затем попытаться перенести концепции на свою проблему.   -  person Sheldore    schedule 29.12.2018
comment
Здравствуйте, возможно, я плохо объяснил: я весь день гуглил эту проблему, но, действительно, я не смог найти подобную проблему, и, поскольку я не очень разбираюсь в этом, я подумал спросить это вопрос.   -  person Giovanni Primativo    schedule 29.12.2018
comment
Это ручная нарезка, надеюсь, вы сможете начать отсюда: print(b[0:1], b[1:4], b[4:6], b[6:11], b[11:16])   -  person iGian    schedule 29.12.2018
comment
Спасибо, я очень ценю это!   -  person Giovanni Primativo    schedule 29.12.2018
comment
Вы можете использовать отмеченный дубликат. Список строк может повторяться так же, как и строка. Следовательно, можно использовать тот же алгоритм.   -  person jpp    schedule 29.12.2018


Ответы (2)


Шаги для решения этой проблемы:

  1. создать пустой список
  2. создайте int done=0, который сообщает вам, сколько вещей вы уже вырезали из своих данных
  3. loop over all elements of your "how to cut the other list in parts"-list
    1. slice from done to done + whatever the current element of your "how to cut the other list in parts" is and append it to the empty list
  4. увеличьте done на то, что вы только что нарезали
  5. добавьте (при необходимости) оставшуюся часть ваших данных

распечатайте это.


Доку:


Вы можете прочитать о том, почему мы не решаем вашу домашнюю работу за вас здесь: открытое письмо ученикам, у которых возникли проблемы с домашним заданием

person Patrick Artner    schedule 29.12.2018

a = [1,3,2,5,4]
b = ['a','b','c','d','e','f','g','h','i','l','m','n','o','p','q']
out=[]
for number in a:
    out.append(b[:number])
    b=b[number:]
print(out)
#[['a'], ['b', 'c', 'd'], ['e', 'f'], ['g', 'h', 'i', 'l', 'm'], ['n', 'o', 'p', 'q']]

Описание

Out — это окончательный список выходных данных. Цикл перебирает каждый элемент в списке a (скажем, «число») и добавляет список такого количества элементов из начала списка b в наш выходной список. Затем он переходит к обновлению списка b, чтобы удалить эти элементы.

person Bitto Bennichan    schedule 29.12.2018
comment
Рассмотрите возможность включения описания вашего кода, чтобы помочь другим понять его. - person Henry Woody; 30.12.2018