嵌套循环问题___>

时间:2021-02-15 01:54:14

标签: python loops nested

有人可以帮我解决这个问题吗?我确定这很简单,但我是 Python 新手。

问题:创建一个让每个人都能相遇的计划 人 = [ “John”, “Marissa”, “Pete”, “Dayton” ]

到目前为止我所拥有的:

persons = ["John", "Marissa", "Pete", "Dayton"]

them = ["Dayton", "Pete", "Marissa", "John"]

for x in persons:
    for y in them:
        print(x, "Meets", y)

这可行,但我不想打印与自己会面的同一个人。

4 个答案:

答案 0 :(得分:4)

此代码应该可以工作:

persons = ["John", "Marissa", "Pete", "Dayton"]

them = ["Dayton", "Pete", "Marissa", "John"]

for x in persons:
    for y in them:
        if not x==y:
            print(x, "Meets", y)

答案 1 :(得分:3)

您也可以使用 combinations() (docs) 中的 itertools。这将使每个人只与其他人会面一次,因此您可以使用 John meets MarissaMarissa meets John,但不能同时使用。

from itertools import combinations

persons = ["John", "Marissa", "Pete", "Dayton"]

for person1, person2 in combinations(persons, 2):
    print(person1, "Meets", person2)

输出:

John Meets Marissa
John Meets Pete
John Meets Dayton
Marissa Meets Pete
Marissa Meets Dayton
Pete Meets Dayton

答案 2 :(得分:0)

除了@itsanantk 的回答,当你想消除相同的配对时(即把“John Meets Marissa”和“Marissa Meets John”视为相同),你可以使用以下模式:

persons = ["John", "Marissa", "Pete", "Dayton"]
for i, x in enumerate(persons):
    for y in persons[i+1:]:
        print(x, "Meets", y)

在这里,每个人都会遇到列表中在它之后的每个人。

使用更简洁的 itertools 模块语法可以达到同样的效果:

from itertools import combinations
persons = ["John", "Marissa", "Pete", "Dayton"]
for x, y in combinations(persons,2):
    print(x, "Meets", y)

答案 3 :(得分:0)

此代码也应该有效:

persons = ["John", "Marissa", "Pete", "Dayton"]
them = ["Dayton", "Pete", "Marissa", "John"]

for x in range(len(persons)):
    for y in range(len(them)):
        if x != y:
           print(f'{persons[x]} meets {them[y]}')

输出:

约翰遇见皮特

约翰遇见玛丽莎

玛丽莎遇见代顿

玛丽莎遇见约翰

皮特遇见代顿

皮特遇见约翰

代顿遇见皮特

代顿遇见玛丽莎