在python中压缩列表

时间:2014-04-02 17:25:41

标签: python list zip

我们说我有两个名单:

["aa", "bb", "cc"], ["dd", "ee", "ffg"]

我必须得到这样的输出:

["aadd", "bbee", "ccffg"]

拉平在我脑海中浮现,但我觉得它比这更先进,所以我真的不知道该怎么做。

5 个答案:

答案 0 :(得分:3)

它比zip()略微复杂,但仅仅是。只需在压缩后将项目对添加到一起:

>>> [a+b for a, b in zip(list1, list2)]
['aadd', 'bbee', 'ccffg']

list1list2是您的列表。

这是有效的,因为zip()返回一个由一系列元组组成的对象,这些元组包含来自两个迭代的相应元素。因此,为了连接这些项目,我们每次只需将它们组合在一起,创建一个新列表。

答案 1 :(得分:1)

只需抛出这个map版本。列表推导更多是Pythonic,但这里是替代版本。

>>> list1 = ["aa", "bb", "cc"]
>>> list2 = ["dd", "ee", "ffg"]
>>> map("".join, zip(list1, list2))
['aadd', 'bbee', 'ccffg']

你甚至可以用这个创建一个生成器。

>>> from itertools import izip, imap
>>> final = imap("".join, izip(list1, list2))
>>> next(final)
'aadd'
>>> next(final)
'bbee'

以下是三种不同解决方案的一些时序结果。 (发电机组击败所有人)

>>> timeit('[a+b for a, b in zip(list1, list2)]', 'list1 = ["aa", "bb", "cc"]*100; list2 = ["dd", "ee", "ffg"]*100', number=10000)
0.4470004917966719
>>> timeit('map("".join, zip(list1, list2))', 'list1 = ["aa", "bb", "cc"]*100; list2 = ["dd", "ee", "ffg"]*100', number=10000)
0.43502864982517053
>>> timeit('imap("".join, izip(list1, list2))', 'from itertools import imap, izip; list1 = ["aa", "bb", "cc"]*100; list2 = ["dd", "ee", "ffg"]*100', number=10000)
0.011020268755800089
>>> timeit('[a+b for a, b in izip(list1, list2)]', 'from itertools import izip; list1 = ["aa", "bb", "cc"]*100; list2 = ["dd", "ee", "ffg"]*100', number=10000)
0.32172862839627214
>>> timeit('map(lambda x,y: x + y, list1, list2)', 'list1 = ["aa", "bb", "cc"]*100; list2 = ["dd", "ee", "ffg"]*100', number=10000)
0.5423113458890612

答案 2 :(得分:0)

与zip结合使用的列表理解将起作用;首先将它们拉成对,然后使用理解单独附加对。

>>> list_a=["aa", "bb", "cc"]
>>> list_b=["dd", "ee", "ffg"]

# Using zip will pair the strings up in tuples
>>> zip(list_a, list_b)
[('aa', 'dd'), ('bb', 'ee'), ('cc', 'ffg')]

# ...so we just append them pair wise using a comprehension
>>> [x+y for x,y in zip(list_a, list_b)]
['aadd', 'bbee', 'ccffg']

答案 3 :(得分:0)

l1=["aa", "bb", "cc"]
l2=["dd", "ee", "ffg"]
print [i+j for i,j in zip(l1,l2)]

输出:

['aadd', 'bbee', 'ccffg']

使用zip访问2个列表元素,并在列表理解中将它们连接起来

答案 4 :(得分:0)

所以基本上你有两个列表,你需要在同一个索引位置的两个元素之间执行相同的操作(连接)。

map函数可以从列表中获取元素并执行所需的函数

list_a = ["aa", "bb", "cc"]
list_b = ["dd", "ee", "ffg"]

result = map(lambda x,y: x + y, list_a, list_b)