我们说我有两个名单:
["aa", "bb", "cc"], ["dd", "ee", "ffg"]
我必须得到这样的输出:
["aadd", "bbee", "ccffg"]
拉平在我脑海中浮现,但我觉得它比这更先进,所以我真的不知道该怎么做。
答案 0 :(得分:3)
它比zip()
略微复杂,但仅仅是。只需在压缩后将项目对添加到一起:
>>> [a+b for a, b in zip(list1, list2)]
['aadd', 'bbee', 'ccffg']
list1
和list2
是您的列表。
这是有效的,因为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)