【问题标题】:Comparing two lists for true and false比较两个列表的真假
【发布时间】:2013-06-16 21:35:42
【问题描述】:

对于我正在编写的程序,最后有两个列表需要比较。他们不会按顺序排列,但这是棘手的部分。最后,第一个列表可能比第二个列表有更多的项目。但只要第一个列表具有在第二个列表中定义的所需项目,该函数就会返回一个真值。我尝试了设置列表,但这更多的是用于交叉点,这不是我想要的。这是我到目前为止的代码:

这是默认的玩家物品栏,会在整个游戏中添加。

pla_back = ["Combat Knife","Flares","Compass"]

这是比较两个列表的代码块。我尝试使用in,但它不起作用。

acceptItem = ["Combat Knife","Flares","Compass","silver bar","a cloth","a stick","some rope"]
    if acceptItem in pla_back:
        placeholder
    else:
        placeholder

如果有人能帮我解决这个问题,我将不胜感激。我觉得答案就在舌尖上,但我就是想不通。

【问题讨论】:

  • 请用您正在使用的编程语言标记您的问题。

标签: python list compare boolean


【解决方案1】:

你应该在acceptItem 做一套。然后就可以了

>>> acceptItem = {"Combat Knife","Flares","Compass","silver bar","a cloth","a stick","some rope"}
>>> pla_back = ["Combat Knife","Flares","Compass"]
>>> all(item in acceptItem for item in pla_back)
True

(如果acceptItem 仍然是一个列表,这也可以工作,但设置查找要快得多)。

【讨论】:

    【解决方案2】:
    if set(pla_back) >= set(acceptItem):
        print 'Player has the required items'
    else:
        print "Player doesn't have the required items"
    

    如果我的解释是正确的,你想看看pla_back 是否包含acceptItem 中的所有元素。所以它可以有更多,但只要它有acceptItem 中的每个元素,它就应该返回true。

    这里>=的意思是'是超集'

    s.issuperset(t)     s >= t      test whether every element in t is in s
    

    所以我们正在检查acceptItem 中的每个元素是否都出现在pla_back

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      相关资源
      最近更新 更多