如何在Python中连接元素两个列表?

San*_*hit 38 python list

我有两个列表,我想以元素方式连接它们.其中一个列表在连接之前经过字符串格式化.

例如 :

a = [0, 1, 5, 6, 10, 11] 
b = ['asp1', 'asp1', 'asp1', 'asp1', 'asp2', 'asp2']
Run Code Online (Sandbox Code Playgroud)

在这种情况下,a将进行字符串格式化.也就是说,新的aaa应该是:

aa = [00, 01, 05, 06, 10, 11]
Run Code Online (Sandbox Code Playgroud)

最终输出应该是:

c = ['asp100', 'asp101', 'asp105', 'asp106', 'asp210', 'asp211']
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我该怎么做?

orl*_*rlp 44

用途zip:

>>> ["{}{:02}".format(b_, a_) for a_, b_ in zip(a, b)]
['asp100', 'asp101', 'asp105', 'asp106', 'asp210', 'asp211']
Run Code Online (Sandbox Code Playgroud)

  • @downvoter - 小心解释为什么我的答案没用? (2认同)
  • @dmedvinsky 这个怎么样?`c = map("{0[1]}{0[0]:02}".format, zip(a, b))` 让魔法开始吧! (2认同)
  • @nightcracker:很好。带有 `map` 的示例适用于 python2。对于python3,如果你想要一个列表,你需要`list(map(...))`,而列表理解对两者都适用 (2认同)
  • 你不需要*那个,如果你需要一个列表,你只需要它(即迭代是不够的)。 (2认同)

RMc*_*McG 19

使用zip

[m+str(n) for m,n in zip(b,a)]
Run Code Online (Sandbox Code Playgroud)

产量

['asp10', 'asp11', 'asp15', 'asp16', 'asp210', 'asp211']
Run Code Online (Sandbox Code Playgroud)


vaa*_*aab 8

其他解决方案(更喜欢printf格式化而不是.format()使用),它也更小:

>>> ["%s%02d" % t for t in zip(b, a)]
['asp100', 'asp101', 'asp105', 'asp106', 'asp210', 'asp211']
Run Code Online (Sandbox Code Playgroud)


Edg*_*rks 5

使用map和zip可以优雅完成:

map(lambda (x,y): x+y, zip(list1, list2))
Run Code Online (Sandbox Code Playgroud)

例:

In [1]: map(lambda (x,y): x+y, zip([1,2,3,4],[4,5,6,7]))
Out[1]: [5, 7, 9, 11]
Run Code Online (Sandbox Code Playgroud)

  • 不,但这是一般模式,我认为这更重要。 (2认同)

Ven*_*ddy 5

如果你想连接任意数量的列表,你可以这样做:

In [1]: lists = [["a", "b", "c"], ["m", "n", "o"], ["p", "q", "r"]] # Or more

In [2]: lists
Out[2]: [['a', 'b', 'c'], ['m', 'n', 'o'], ['p', 'q', 'r']]    

In [4]: list(map("".join, zip(*lists)))
Out[4]: ['amp', 'bnq', 'cor']
Run Code Online (Sandbox Code Playgroud)