有人可以帮我解决这个问题吗?我确定这很简单,但我是 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)
这可行,但我不想打印与自己会面的同一个人。
答案 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 Marissa
或 Marissa 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]}')
输出:
约翰遇见皮特
约翰遇见玛丽莎
玛丽莎遇见代顿
玛丽莎遇见约翰
皮特遇见代顿
皮特遇见约翰
代顿遇见皮特
代顿遇见玛丽莎