附加到Python

时间:2017-02-08 15:45:31

标签: python append

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

>>> L1 = [1,2,3]
>>> L2 = [1,2,3]
>>> zipped = zip(L1, L2)
[[(1, 1), (2, 2), (3, 3)]

如何将另一个列表附加到zipped,生成与

相同的输出
>>> L3 = [5,5,5]
>>> zip(L1, L2, L3)
[(1, 1, 5), (2, 2, 5), (3, 3, 5)]

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

>>> zipped.append(L3)
[(1, 1), (2, 2), (3, 3), [5, 5, 5]]

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

编辑:

现在我觉得我错过了问题的一部分。这是一个基于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)

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

4 个答案:

答案 0 :(得分:10)

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

zip(*zip(*zipped), L3)

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

[old + (new,) for old, new in zip(zipped, L3)]

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

import random

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

zipped2 = zip(*columns)
print(zipped2)

答案 1 :(得分:4)

您可以先创建要“追加”的列表,然后使用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)] 解压缩它们:

lists

{{1}}可以包含任意数量的子列表。

答案 2 :(得分:1)

对于python3:

lst1 = [1,2,3]
lst2 = ['a','b','c']
lst3 = ['*','#','+']
lst4 = [4,5,6]

zipped = zip(lst1,lst2,lst3) #any number of lists
newlist = [(*z, j) for z, j in zip(zipped, lst4)]

#output
(1, 'a', '*', 4)
(2, 'b', '#', 5)
(3, 'c', '+', 6)

适用于任意数量的列表。

答案 3 :(得分:0)

您可以使用列表理解。

[(i[0], i[1], j) for i, j in zip(zipped, L3)]