我有一个从文件中读取的两个列表,它们看起来像这样:
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
>>>
我怎么能这么做呢?
答案 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。