有没有Python内置函数可以从多个列表中创建元组?

7

是否有Python内置函数可以对一组列表执行与tupler相同的操作,或者类似的操作:

def tupler(arg1, *args):
    length = min([len(arg1)]+[len(x) for x in args])
    out = []
    for i in range(length):
        out.append(tuple([x[i] for x in [arg1]+args]))
    return out

所以,举个例子:
tupler([1,2,3,4],[5,6,7])

返回:

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

或许有一种适合Python的方法来完成这个任务,或者有类似的生成器吗?


2
还要看看itertools模块。itertools.izip()和itertools.izip_longest()返回内存高效的迭代器,实现与zip相同的结果。 - sateesh
4个回答

15

我认为您需要使用zip():

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

5
请查看内置的zip函数:http://docs.python.org/library/functions.html#zip,它可以处理两个以上的列表,比如 n 个,然后创建n元组。请注意保留HTML标记。
>>> zip([1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14])
 [(1, 5, 9, 13), (2, 6, 10, 14)]

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

--->[(1,5),(2,6),(3,7)]


args = [(1,5),(2,6),(3,7)]

zip(*args)

--->[1,2,3],[5,6,7]

0

正确的方法是使用zip函数。

或者我们可以使用列表推导和内置的enumerate函数来实现相同的结果。

>>> L1 = [1,2,3,4]
>>> L2 = [5,6,7]
>>> [(value, L2[i]) for i, value in enumerate(L1) if i < len(L2)]
[(1, 5), (2, 6), (3, 7)]
>>> 

上述示例的缺点是我们并不总是迭代长度最小的列表。

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