如何在同一个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)):
...
为什么不能使用嵌套for循环?
这里有两个可能的问题:如何同时遍历这些变量,或者如何遍历它们的组合。
幸运的是,两者都有简单的答案。第一种情况,您希望使用
zip
。将输出
记住,您可以将任何iterable放在
zip
中,这样您就可以像这样轻松地编写示例:实际上,刚刚意识到这是行不通的。它只会迭代,直到较小的范围用完。在这种情况下,听起来像是要遍历循环的组合。
在另一种情况下,您只需要一个嵌套循环。
给你
你也可以作为一个列表理解。
希望能有所帮助。
如果需要嵌套for循环的效果,请使用:
如果只想同时循环,请使用:
注意,如果
x
和y
的长度不同,则zip
将截断为最短列表。正如@abarnert所指出的,如果不想截断到最短的列表,可以使用itertools.zip_longest
。更新
基于“将读取列表“t1”和“t2”并返回所有相同元素的函数”的请求,我认为OP不需要
zip
或product
。我想他们想要一个set
:一个
set
方法的intersection
将返回它和另一个集合的所有公共元素(注意,如果您的列表包含其他list
,您可能希望首先将内部list
转换为tuples
,以便它们是可哈希的;否则对set
的调用将失败)。然后,list
函数将集合转换回列表。更新2
或者,OP可能希望中相同的元素在列表中处于相同的位置。在这种情况下,
zip
将是最合适的,并且它截断到最短的列表就是您想要的(因为当其中一个列表只有5个元素时,索引9处不可能有相同的元素)。如果这是你想要的,就这样做:这将返回一个列表,其中只包含列表中相同且位置相同的元素。
相关问题 更多 >
编程相关推荐