有两个变量的“for循环”?[副本]

这个问题在这里已经有答案了
如何并行遍历两个列表?

(8个答案)

去年关闭了

如何在相同的for循环中包含两个变量

t1=[整数、字符串和列表的列表]
t2=[另一个整数、字符串和列表列表]
def(t):#一个函数,它将读取列表“t1”和“t2”,并返回所有相同的元素
对于范围内的i(len(t1))和范围内的j(len(t2)):
...

如果要获得嵌套for循环的效果,请使用:

导入itertools
对于itertools.产品中的i,j(范围(x),范围(y)):
#东西。。。

如果只想同时循环,请使用:

zip中i,j(范围(x),范围(y))的

:
#东西。。。

请注意,如果xy的长度不相同,zip将截断为最短的列表。正如@abarnert所指出的,如果您不想截断到最短的列表,可以使用itertools.zip\u longest

更新

基于对“一个将读取列表“t1”和“t2”并返回所有相同元素的函数”的请求,我认为OP不需要zip产品。我想他们想要一套

定义相等元素(t1、t2):
返回列表(集合(t1).交叉点(集合(t2)))
#你也可以这样做
#返回列表(集合(t1)和集合(t2))

setintersection方法将返回它和另一个集合共有的所有元素(请注意,如果您的列表包含其他lists,您可能希望首先将内部lists转换为元组,以便它们可以散列;否则对set的调用将失败)。然后,list功能将集合转换回列表

更新2

或者,OP可能希望列表中相同位置的元素在中相同。在这种情况下,zip将是最合适的,它将截断为最短的列表这一事实是您想要的(因为当其中一个列表只有5个元素长时,索引9处不可能有相同的元素)。如果这是您想要的,请使用以下选项:

定义相等元素(t1、t2):
如果x==y,则返回[x代表x,y在zip(t1,t2)中]

这将返回一个列表,其中只包含列表中相同且位置相同的元素

发表评论