#python
#python
Вопрос:
Это вопрос, касающийся лучших методов кодирования. Предположим, мне нужно заполнить список неизвестной длины; обычно я просто инициализирую список myList = []
, но я чувствую, что это плохой способ сделать это. Я часто получаю фрагменты кода, которые выглядят так:
list1 = []
list2 = []
list3 = []
for a,b,c in zip(x,y,z):
list1.append(a)
list2.append(b)
list3.append(c)
Я понимаю, что в примере вы можете инициализировать эти списки до нужной длины, фактически вы можете просто использовать x,y,z
их как есть. Мой вопрос касается ситуации, в которой вы не обязательно знаете длину списков. На мой взгляд, необходимость использовать три строки для инициализации этих списков является неуклюжей; что вы, ребята, делаете? Спасибо за любой вклад!
Комментарии:
1. Почему это плохая вещь? Большинство списков используются для обработки переменного количества элементов.
2. Вы имеете в виду, что не знаете, сколько списков передается
zip
?3. Нет, я просто использовал это в качестве примера, чтобы проиллюстрировать, как для инициализации списков требуется три строки кода. Я понимаю, что списки используются для хранения переменного количества элементов. Мне было интересно, есть ли способ инициализировать их более чистым способом.
4.
list1 = list(x)
и т.д.?5.
lists = [[] for i in range(n_lists)]
Ответ №1:
Не нужно ничего умного:
list1 = list(x)
list2 = list(y)
list3 = list(z)
Комментарии:
1. Это не то, что я спросил.
2. Ах. Что вы спросили?
3. Непонятно, о чем вы спрашиваете. Это делает то же самое, что и ваш текущий цикл, только более четко и эффективно.
4. «Я понимаю, что в примере вы можете инициализировать эти списки до нужной длины, фактически вы можете просто использовать
x,y,z
их как есть. Мой вопрос касается ситуации, в которой вы не обязательно знаете длину списков. »5. Длина
x
? или длина(x, y, z)
? т. е. может быть не 3
Ответ №2:
Используйте список списков:
lol = [[], [], []]
for items in zip(x, y, z):
for i, item in enumerate(items):
lol[i].append(item)
Комментарии:
1. Суть заключалась не в том, чтобы решить конкретную проблему (как говорит Эскотт в вопросе, он понимает, что может просто использовать
x, y, z
), а в том, чтобы показать схему работы с несколькими списками.2. Итак, ваше предложение — это просто список списков? Это интересная идея. Я думаю, таким же образом, как вы могли бы сделать
a,b,c = [],[],[]
.3. Да, когда вы видите, что одна и та же операция выполняется с очень похожими объектами под разными именами, лучшим решением часто является помещение их в какой-либо контейнер, чтобы вы могли перебирать их и делать то же самое с каждым в цикле. Другим вариантом часто является написание функции для выполнения с ними определенных действий и передача каждого из них в функцию, но в данном случае это не совсем применимо.