说我有2个名单:
stage {
if (env.isPR) {
sh()
列表是一对一的。
那么我该如何创建一个操作循环(任何操作):
{{1}}
答案 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
内置函数将两个或多个列表元素组合在一个元组列表中,然后我们可以通过显式循环或理解来迭代它们。