在Python中附加到zip()

CFW*_*CFW 2 python append

给定任意数量的压缩列表,例如

>>> L1 = [1,2,3]
>>> L2 = [1,2,3]
>>> zipped = zip(L1, L2)
[[(1, 1), (2, 2), (3, 3)]
Run Code Online (Sandbox Code Playgroud)

如何将另一个列表附加到zipped,生成相同的输出

>>> L3 = [5,5,5]
>>> zip(L1, L2, L3)
[(1, 1, 5), (2, 2, 5), (3, 3, 5)]
Run Code Online (Sandbox Code Playgroud)

我正在考虑append()的方向,但这会产生以下不希望的结果

>>> zipped.append(L3)
[(1, 1), (2, 2), (3, 3), [5, 5, 5]]
Run Code Online (Sandbox Code Playgroud)

背景:我想在循环中为任意数量的列表创建压缩列表.

编辑:

现在我觉得我错过了问题的一部分.这是一个基于RyE的MWE答案:

import random

N = 4
zipped2 = zip([1,2,3],[1,2,3])  # works
zipped2 = []  # does not work
for n in range(N):
    Ln = random.sample(xrange(100),3)
    zipped2 = [old + (new,) for old, new in zip(zipped2, Ln)]

print(zipped2)
Run Code Online (Sandbox Code Playgroud)

在预压缩列表上使用此方法非常有效.但是,我想在循环中创建整个输出,因此想从一个空列表开始.

Ry-*_*Ry- 11

如果你真的喜欢这个词zip,你可以使用它:

zip(*zip(*zipped), L3)
Run Code Online (Sandbox Code Playgroud)

如果您正在使用Python 2或者是让人们理解您的代码的粉丝,那么列表理解可能是最好的:

[old + (new,) for old, new in zip(zipped, L3)]
Run Code Online (Sandbox Code Playgroud)

您的编辑似乎表明您只想要压缩一些列表,但是:

import random

N = 4
columns = []
for n in xrange(N):
    Ln = random.sample(xrange(100), 3)
    columns.append(Ln)

zipped2 = zip(*columns)
print(zipped2)
Run Code Online (Sandbox Code Playgroud)

  • 值得 +10,因为 *喜欢让人们理解您的代码* (2认同)

Dee*_*ace 6

您可以预先创建要“追加”的列表,然后使用*以下命令将其解压缩:

lists = [[1, 2, 3], [1, 2, 3]]

print(list(zip([1, 2, 3], [1, 2, 3], *lists)))
# [(1, 1, 1, 1), (2, 2, 2, 2), (3, 3, 3, 3)]
Run Code Online (Sandbox Code Playgroud)

lists 可以包含任意数量的子列表。