- 此问题在此处已有答案**:
How do I iterate through two lists in parallel?(8个答案)
两年前关闭了。
如何在同一个for
循环中包含两个变量?
t1 = [a list of integers, strings and lists]
t2 = [another list of integers, strings and lists]
def f(t): #a function that will read lists "t1" and "t2" and return all elements that are identical
for i in range(len(t1)) and for j in range(len(t2)):
...
8条答案
按热度按时间zfciruhq1#
如果您希望获得嵌套for循环的效果,请使用:
如果只想同时循环,请使用:
注意,如果
x
和y
的长度不同,zip
将截断到最短列表,正如@abarnert指出的,如果不想截断到最短列表,可以使用itertools.zip_longest
。基于对"读取列表" t1 "和" t2 "并返回所有相同元素的函数"的请求,我认为OP不需要
zip
* 或 *product
。set
的intersection
方法将返回它和另一个集合共有的所有元素(注意,如果您的列表包含其他list
,您可能希望首先将内部的list
转换为tuples
,以便它们是可散列的;否则对set
的调用将失败)。然后,list
函数将集合返回到列表中。或者,OP可能需要在列表中的相同位置相同的元素,在这种情况下,
zip
是最合适的,并且它截断到最短列表的事实是你想要的(因为当列表只有5个元素长时,索引9处不可能有相同的元素),如果这是你想要的,那么使用下面的代码:这将返回一个列表,其中只包含列表中相同位置的相同元素。
vuktfyat2#
这里有两个可能的问题:如何同时迭代这些变量,或者如何循环遍历它们的组合。
幸运的是,这两种情况都有简单的答案:第一种情况,您希望使用
zip
。意志输出
请记住,您可以在
zip
中放入 * 任意可迭代项 *,因此您可以轻松地编写示例,如下所示:在另一种情况下,您只需要一个嵌套循环。
给你
您也可以将其作为列表解析来执行。
tp5buhyn3#
为什么不能使用嵌套的for循环?
nlejzf6q4#
应该可以。
5q4ezhmt5#
如果你真的只是在一个范围内进行锁步迭代,你可以用以下几种方法之一:
如果
x <= y
,则上述所有项都等价于for i, j in zip(range(x), range(y))
。如果你想要一个嵌套循环,并且你只有两个可迭代对象,那么就使用嵌套循环:
如果有两个以上的可迭代对象,则使用
itertools.product
。最后,如果希望锁步迭代到
x
,然后继续到y
,则必须决定x
的其余值应该是什么。tez616oj6#
“巨蟒3号”
使用zip和range在for循环中添加2个变量;返回列表。
注:将仅运行到最小范围结束。
holgip5t7#
对于您的用例,使用
while
循环可能更容易。作为警告,这种方法将截断到最短列表的长度。
k5ifujac8#
我认为您正在寻找嵌套循环。
示例(基于您的编辑):
可以简化为一个单一的理解:
但要找到共同元素,您只需执行以下操作:
如果你的列表包含不可散列的对象(如其他列表,字典),使用冻结集: