Я пытаюсь научиться "застегивать" списки. Для этого у меня есть программа, где в определенный момент я делаю следующее:
x1, x2, x3 = stuff.calculations(withdataa)
Это дает мне три списка, x1
, x2
, и x3
, каждый, скажем, размер 20.
Теперь я делаю:
zipall = zip(x1, x2, x3)
Тем не менее, когда я делаю:
print "len of zipall %s" % len(zipall)
Я получаю 20, что не то, что я ожидал. Я ожидал три. Я думаю, что я делаю что-то в корне неправильно.
python
python-2.7
AJW
источник
источник
zip
сделать? Почему у вас должно быть три списка - как они будут выглядеть?Ответы:
Когда вы
zip()
объединяете три списка, содержащие по 20 элементов каждый, в результате получается двадцать элементов. Каждый элемент состоит из трех кортежей.Посмотреть на себя:
Чтобы узнать, сколько элементов содержит каждый кортеж, вы можете проверить длину первого элемента:
Конечно, это не будет работать, если списки были пустыми для начала.
источник
zip
вернул список. В Python 3 это итераторzip
занимает кучу списков лайкови "упаковывает" их в один список, записи которого состоят из 3-х кортежей
(ai, bi, ci)
. Представьте, что вы рисуете молнию горизонтально слева направо.источник
В Python 2.7 это могло бы работать нормально:
Но в Python 3.4 это должно быть (в противном случае результат будет примерно таким
<zip object at 0x00000256124E7DC8>
):источник
zip
создает новый список, заполненный кортежами, содержащими элементы из итерируемых аргументов:Я ожидаю, что вы пытаетесь создать кортеж, в котором каждый элемент является списком.
источник
Источник: мой блог (лучше форматирование)
пример
вход
Ноль или более итераций [1] (например, список, строка, кортеж, словарь)
Выход (список)
i
th кортеж = (element_i arg1, element_i arg2…, element_i argn
)Краевые Чехлы
1) Пустая строка: len (str) = 0 = нет кортежей
2) Одна строка: len (str) == 2 кортежа с len (args) == 1 элемент (ов)
Почтовый индекс в действии!
1. Создайте словарь [2] из двух списков
zip
это элегантное, четкое и краткое решение2. Печать столбцов в таблице
«*» [3] называется «распаковка»:
f(*[arg1,arg2,arg3]) == f(arg1, arg2, arg3)
Дополнительный кредит: распаковка
zip(*args)
называется «расстегивание молнии», потому что он имеет обратный эффектzip
unzipped
: tuple_1 = e1 каждого сжатого кортежа. tuple_2 = e2 каждогоzipped
Сноски
*
Код:*
взялnumbers
(1 arg) и «распаковал» его '2 элемента в 2 argsисточник
В основном функция zip работает со списками, кортежами и словарями в Python. Если вы используете IPython, тогда просто введите zip? И проверьте, что такое zip ().
Если вы не используете IPython, просто установите его: "pip install ipython"
Для списков
Выход
[('a', 'p'), ('b', 'q'), ('c', 'r')
Для словаря:
Выход:
источник
В Python 3
zip
вместо этого возвращается итератор, который необходимо передать в функцию списка, чтобы получить сжатые кортежи:Тогда к
unzip
ним обратно просто сопрягаем сжатый итератор:Если вместо кортежей нужна оригинальная форма списка:
источник
Ради полноты.
Когда длины сжатых списков не равны. Длина списка результатов станет самой короткой без ошибок
источник
Я не думаю, что
zip
возвращает список.zip
возвращает генератор. Вы должны сделать,list(zip(a, b))
чтобы получить список кортежей.источник
Здесь стоит добавить, поскольку это очень важный вопрос о zip.
zip
отличный, идиоматичный Python - но он не очень хорошо масштабируется для больших списков.Вместо того:
Использование
izip
. Для современной обработки он хранит ее в кэш-памяти L1 и гораздо эффективнее для больших списков. Используйте это так же просто, как добавлениеi
:источник