【问题标题】:Nested Loops Question___>嵌套循环问题___>
【发布时间】:2021-05-17 23:26:21
【问题描述】:

有人可以帮我解决这个问题吗?我敢肯定这很简单,但我是 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)

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

【问题讨论】:

  • 使用索引和列表的 1 个副本。 for i in range(n-1): 后跟 for j in range(i+1,n): 是迭代不同索引对 (i,j) 的标准方法。
  • @JohnColeman 这在这种情况下不起作用,因为有两个列表。
  • 试试if x != y: print(...)
  • @Selcuk 我认为是 OP 提出了第二个列表,最初的问题陈述只涉及一个人列表,尽管我当然可能是错的。
  • 你编了名单吗?还是随机给你的?

标签: python loops nested


【解决方案1】:

这段代码应该可以工作:

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)

【讨论】:

    【解决方案2】:

    您还可以使用itertools (docs) 中的combinations()。这将使每个人只与其他人见面一次,因此您将拥有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
    

    【讨论】:

      【解决方案3】:

      除了@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)
      

      【讨论】:

        【解决方案4】:

        这段代码也应该可以工作:

        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]}')
        

        输出:

        约翰遇见皮特

        约翰遇见玛丽莎

        玛丽莎遇见代顿

        玛丽莎遇见约翰

        皮特遇见代顿

        皮特遇见约翰

        代顿遇见皮特

        代顿遇见玛丽莎

        【讨论】:

          猜你喜欢
          • 2017-09-20
          • 2016-06-23
          • 1970-01-01
          • 1970-01-01
          • 2016-06-06
          • 2012-01-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多