【问题标题】:Comparing three lists and print out set where variables match two lists but not the third比较三个列表并打印出变量匹配两个列表但不是第三个的集合
【发布时间】:2021-08-03 17:02:43
【问题描述】:

我正在尝试构建一个脚本来比较三个列表“alice”、“bob”和“silversted”,它返回列表“alice”和“Silvester”中所有相同项目的集合,但这些项目确实不在名为“bob”的列表中:

这是我的代码:

alice = ['II', 'IV', 'II', 'XIX', 'XV', 'IV', 'II']

bob = ['IV', 'III', 'II', 'XX', 'II', 'XX']

silvester = ['XVIII', 'XIX', 'III', 'I', 'III', 'XVIII']

meet =[]

def love_meet(bob, alice):
    return (set(alice) & set(bob))
    
print(love_meet(bob, alice))

def affair_meet(bob, alice, silvester):
    for i in alice:
        for y in silvester:
            for x in bob:
                if i == y and i != x:
                    meet.append(i)
                    return (set(meet))

print(affair_meet(bob, alice, silvester)) 

if __name__ == "__main__":
    assert love_meet(
        ["IV", "III", "II", "XX", "II", "XX"],
        ["II", "IV", "II", "XIX", "XV", "IV", "II"],
    ) == {"II", "IV"}

    assert affair_meet(
        ["IV", "III", "II", "XX", "II", "XX"],
        ["II", "IV", "II", "XIX", "XV", "IV", "II"],
        ["XVIII", "XIX", "III", "I", "III", "XVIII"],
    ) == {"XIX"}

虽然输出在在线编译器中有效,但我从我正在使用的练习网站 (Hackinscience.org) 收到一条消息:

从外遇会议,我期待一个集合,你给了一个

输出看起来像一个集合,所以我不确定这里发生了什么。

还有比目前更好的编码方式吗?

【问题讨论】:

    标签: list for-loop set


    【解决方案1】:

    您可以使用 set 方法 .intersection.difference 代替 for 循环。例如:

    alice = ["II", "IV", "II", "XIX", "XV", "IV", "II"]
    bob = ["IV", "III", "II", "XX", "II", "XX"]
    silvester = ["XVIII", "XIX", "III", "I", "III", "XVIII"]
    
    
    def affair_meet(bob, alice, silvester):
        return set(alice).intersection(silvester).difference(bob)
    
    
    assert (
        affair_meet(
            ["IV", "III", "II", "XX", "II", "XX"],
            ["II", "IV", "II", "XIX", "XV", "IV", "II"],
            ["XVIII", "XIX", "III", "I", "III", "XVIII"],
        )
        == {"XIX"}
    )
    

    【讨论】:

      【解决方案2】:

      你的程序似乎没问题。 Ur 函数 r 不返回无类型。我已经使用类型 func 进行了检查。无论如何,我试图简化你的代码。

      alice = ['II', 'IV', 'II', 'XIX', 'XV', 'IV', 'II']
      
      bob = ['IV', 'III', 'II', 'XX', 'II', 'XX']
      
      silvester = ['XVIII', 'XIX', 'III', 'I', 'III', 'XVIII']
      
      meet =set()
      
      def love_meet(bob, alice):
          return set(alice) & set(bob)
          
      print(love_meet(bob, alice))
      
      def affair_meet(bob, alice, silvester):
          global meet
          #meet = set() #this depends on need
          for i in set(alice) & set(silvester):
              if i not in bob:
                  meet.add(i)
          return meet
      
      print(affair_meet(bob, alice, silvester))
      
      if __name__ == "__main__":
          assert love_meet(
              ["IV", "III", "II", "XX", "II", "XX"],
              ["II", "IV", "II", "XIX", "XV", "IV", "II"],
          ) == {"II", "IV"}
      
          assert affair_meet(
              ["IV", "III", "II", "XX", "II", "XX"],
              ["II", "IV", "II", "XIX", "XV", "IV", "II"],
              ["XVIII", "XIX", "III", "I", "III", "XVIII"],
          ) == {"XIX"}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-26
        • 1970-01-01
        • 2022-08-19
        • 2019-02-03
        • 1970-01-01
        • 1970-01-01
        • 2018-09-27
        • 1970-01-01
        相关资源
        最近更新 更多