将多个for循环链接在一起

时间:2018-02-26 01:50:57

标签: python python-2.7

我有一个从文件中读取的两个列表,它们看起来像这样:

list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 0]

然后我有一个需要调用这两个列表的for循环:

res = []
for i in list1:
    for x in list2:
        if i + x * 2 == 10:
             res.append((i,x))

我想要做的是将for循环链接成一个,这样它只会遍历每个数字,例如:

res = []
for i in list1 and x in list2:
    if i + x * 2 == 10:
        res.append((i,x))

现在执行上述操作,将输出x未定义的错误:

>>> list1 = [1, 2, 3, 4, 5]
>>> list2 = [6, 7, 8, 9, 0]
>>> res = []
>>> for i in list1 and x in list2:
...     if i + x * 2 == 10:
...         res.append((i,x))
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> 

我怎么能这么做呢?

2 个答案:

答案 0 :(得分:4)

尝试 zip itertools.product

import itertools
...
for i, x in itertools.product(list1, list2):
   if i + x * 2 == 10:
       res.append((i, x))

答案 1 :(得分:0)

我所做的是使用range循环,即循环可能的索引而不是元素。当然,你必须确保列表长度相同,但它确实很有帮助。在您的情况下实施:

res = []
for index in range (len (list1)):
    if list1 [index] + list2 [index] * 2 == 10: res.append ((list1 [index], list2 [index]))

如果我敢,一个单行:

res = [(list1 [index], list2 [index]) for index in range (len (list1)) if list1 [index] + list2 [index] * 2 == 10]

请记住,这只是交叉搜索列表,并不会为list1中的每个元素循环遍历list2。