如何使用Python在我的代码中获取[(1, 2, 3, 4),(5, 6, 7, 8)]?

3
这是我的代码:
a = [(1,2),(5,6)]
b = [(3,4),(7,8)]

print zip(a,b)

并且它显示:
[((1, 2), (3, 4)), ((5, 6), (7, 8))]

但我想获得:

[(1, 2, 3, 4), (5, 6, 7, 8)]

那么我能做些什么呢,

谢谢。

3个回答

8

试试这个:

[aa+bb for aa,bb in zip(a,b)]

6
>>> a = [(1,2),(5,6)]
>>> b = [(3,4),(7,8)]
>>> [x+y for x,y in zip(a,b)]
[(1, 2, 3, 4), (5, 6, 7, 8)]
>>> 

3
您可以使用以下列表推导式:
[x + y for (i, x) in enumerate(a) for (j, y) in enumerate(b) if i == j]

结果:

[(1, 2, 3, 4), (5, 6, 7, 8)]

更新 #2

您也可以使用这个列表推导式来处理特定的输入:

[a[0] + b[0], a[1] + b[1]]

这显然比zip版本更快。

from timeit import Timer

s1 = """\
a = [(1, 2), (5, 6)]
b = [(3, 4), (7, 8)]

[x + y for (i, x) in enumerate(a) for (j, y) in enumerate(b) if i == j]
"""

s2 = """\
a = [(1, 2), (5, 6)]
b = [(3, 4), (7, 8)]

[x + y for x, y in zip(a,b)]
"""

s3 = """\
a = [(1, 2), (5, 6)]
b = [(3, 4), (7, 8)]

[a[0] + b[0], a[1] + b[1]]
"""
t1 = Timer(s1)
t2 = Timer(s2)
t3 = Timer(s3)

print ("non-zip: {0} | zip: {1} | list-concat: {2}".format(t1.timeit(), t2.timeit(), t3.timeit()))

结果 (Python 2.6.6 在 Linux x86-64 上的表现):

non-zip: 2.17631602287 | zip: 1.20438694954 | list-concat: 0.658749103546

为什么要踩我?请注意,我没有使用内置的zip函数。在这里阅读zip的实现:http://www.python.org/dev/peps/pep-0201/ - Gianluca Bargelli
[item[0] + item[1] for item in (a, b)] 返回 [(1, 2, 5, 6), (3, 4, 7, 8)] - eumiro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接