Вопрос-Ответ

Zip lists in Python

Zip-списки в Python

Я пытаюсь научиться "архивировать" списки. С этой целью у меня есть программа, где в определенный момент я делаю следующее:

x1, x2, x3 = stuff.calculations(withdataa)

Это дает мне три списка, x1, x2 и x3, каждый, скажем, размером 20.

Теперь я делаю:

zipall = zip(x1, x2, x3)

Однако, когда я делаю:

print "len of zipall %s" % len(zipall)

Я получаю 20, что не то, что я ожидал. Я ожидал три. Я думаю, что делаю что-то в корне неправильное.

Переведено автоматически
Ответ 1

Когда вы zip() объединяете три списка, содержащих по 20 элементов в каждом, в результате получается двадцать элементов. Каждый элемент состоит из трех кортежей.

Убедитесь сами:

In [1]: a = b = c = range(20)

In [2]: zip(a, b, c)
Out[2]:
[(0, 0, 0),
(1, 1, 1),
...
(17, 17, 17),
(18, 18, 18),
(19, 19, 19)]

Чтобы узнать, сколько элементов содержит каждый кортеж, вы могли бы изучить длину первого элемента:

In [3]: result = zip(a, b, c)

In [4]: len(result[0])
Out[4]: 3

Конечно, это не сработает, если списки изначально были пустыми.

Ответ 2

zip занимает кучу списков, которые нравятся

a: a1 a2 a3 a4 a5 a6 a7...
b: b1 b2 b3 b4 b5 b6 b7...
c: c1 c2 c3 c4 c5 c6 c7...

и "архивирует" их в один список, элементы которого состоят из 3 кортежей (ai, bi, ci). Представьте, что вы рисуете zipper горизонтально слева направо.

Ответ 3

В Python 2.7 это могло бы сработать нормально:

>>> a = b = c = range(20)
>>> zip(a, b, c)

Но в Python 3.4 это должно быть (в противном случае результат будет примерно таким <zip object at 0x00000256124E7DC8>):

>>> a = b = c = range(20)
>>> list(zip(a, b, c))
Ответ 4

zip creates a new list, filled with tuples containing elements from the iterable arguments:

>>> zip ([1,2],[3,4])
[(1,3), (2,4)]

I expect what you try to so is create a tuple where each element is a list.

python list python-2.7