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

时间:2017-12-07 02:56:01

标签: python loops

说我有2个名单:

stage {
  if (env.isPR) {
    sh()

列表是一对一的。

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

{{1}}

3 个答案:

答案 0 :(得分:2)

使用zip

a = [1,2,3];
b = [4,5,6];

for x,y in zip(a,b):
    print x,y;

答案 1 :(得分:2)

由于您的列表是一对一的,因此它们必须具有相同的大小。在这种情况下,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))

这意味着您可以在压缩的iterable中的每个元组上应用函数:

>>> 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()

答案 2 :(得分:1)

刚加工:

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

如果您想保留结果,

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

zip内置函数将两个或多个列表元素组合在一个元组列表中,然后我们可以通过显式循环或理解来迭代它们。