如何为两个1比1列表创建操作循环



说我有2个列表:

A = [a1,a2,a3,...,an]
B = [b1,b2,b3,...,bn]

列表是一对一的。

那么如何创建一个操作的循环(任何操作):

a1 with b1
a2 with b2
...
an with bn

由于您的列表是一对一的,因此它们的大小必须相同。在这种情况下,zip()是这里的最佳选择。此功能使迭代器并从每个迭代中汇总成元组成对:

>>> a = [1, 2, 3, 4]
>>> b = [5, 6, 7, 8]
>>> zipped = zip(a, b)
>>> print(list(zipped))
[(1, 5), (2, 6), (3, 7), (4, 8)]
>>> print(tuple(zipped))
((1, 5), (2, 6), (3, 7), (4, 8))

这意味着您可以在拉链中的每个元素上应用功能:

>>> print([sum(x) for x in zipped])
[6, 8, 10, 12]
>>> print([max(x) for x in zipped])
[5, 6, 7, 8]

您也可以使用map()实现类似的行为:

>>> a = [1, 2, 3, 4]
>>> b = [5, 6, 7, 8]
>>> print(list(map(lambda x, y : x + y, a, b)))
[6, 8, 10, 12]
>>> print(list(map(lambda x, y : x * y, a, b)))
[5, 12, 21, 32]

我还建议使用迭代器编写zip()功能,以查看其工作原理:

def my_zip(seq1, seq2):
    i1 = iter(seq1)
    i2 = iter(seq2)
    while True:
        yield next(i1), next(i2)

此外,另一种不太首选的方法是循环第一个列表,并使用这些索引也访问第二个列表中的元素:

>>> a = [1, 2, 3, 4]
>>> b = [5, 6, 7, 8]
>>> for i in range(len(a)):
        print(a[i], b[i])
1 5
2 6
3 7
4 8
>>> print([a[i] + b[i] for i in range(len(a))])
[6, 8, 10, 12]

这不是很好的Pythonic,但也有效。我建议对此使用zip()

使用 zip

a = [1,2,3];
b = [4,5,6];
for x,y in zip(a,b):
    print x,y;

只是要处理:

for ea, eb in zip(A, B):
    f(ea, eb)

如果要保持结果,

[f(ea, eb) for ea, eb in zip(A, B)]

zip内置的in缝在一起将两个或多个列表缝制到一个元素列表中,然后我们可以通过显式循环或通过理解来迭代。

相关内容

  • 没有找到相关文章

最新更新