有两个变量的“for循环”?

新手上路,请多包涵

如何在同一个 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)):
        ...

原文由 Quester 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 572
1 个回答

如果您想要嵌套 for 循环的效果,请使用:

 import itertools
for i, j in itertools.product(range(x), range(y)):
    # Stuff...

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

 for i, j in zip(range(x), range(y)):
    # Stuff...

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

更新

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

 def equal_elements(t1, t2):
    return list(set(t1).intersection(set(t2)))
    # You could also do
    # return list(set(t1) & set(t2))

intersection set 方法将返回它和另一组共有的所有元素(请注意,如果您的列表包含其他 list ,首先将内部的 list s 转换为 tuples 以便它们是可哈希的;否则调用 set 将失败。)。 list 函数然后将集合转回列表。

更新 2

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

 def equal_elements(t1, t2):
    return [x for x, y in zip(t1, t2) if x == y]

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

原文由 SethMMorton 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题