Python,检查列表中的任何元素是否包含在另一个列表中

时间:2014-03-31 10:16:49

标签: python

从codingbat网页,从list 1 python,它要求我写一个定义,如果两个元素的数组包含数字2或3,它返回true,我写道:

def has23(nums):
    for i in range(nums):
      if i == 2 or i ==3:
         return True
      else:
         return False

但它似乎无法应对has23([4, 3])返回False的地方。我已经知道了解决方案(感谢python社区人员),但我真的无法理解我写的定义有什么问题。

可以请某人帮忙吗?

2 个答案:

答案 0 :(得分:3)

问题是您只是检查第一个值,然后返回TrueFalse。而是按如下方式进行:

<强> 1)

def has23(nums):
    if (2 in nums) or (3 in nums):
        return True
    else:
        return False

2) @Ricardo建议:return (2 in nums) or (3 in nums)

3) @thefourtheye建议:return len(set(nums) & {2, 3}) > 0

4) @thefourtheye还建议return set(nums).isdisjoint({2, 3})

5) @RemcoGerlich建议return any(i == 2 or i == 3 for i in nums)

6)或者如果你想使用你的循环类型:

def has23(nums):
    for i in nums:
        if i == 2 or i == 3:
            return True
    return False

[注]

我正在用lambda测试这个问题,这是一种测试任意数量的检查的方法: 这会检查to_check中的任何元素是否在lst

<强> 7)

>>> lst = [1,2,4,7,4,10,53,76,45,354,654,434,32]
>>> to_check = [3,4,9,96,23]
>>> print any(map(lambda i: i in lst, to_check))
True

我知道这与你的问题没有直接关系,但可能需要注意。相当漂亮。

另一种方式:

<强> 8)

>>> print len(set(bar) & set(to_check)) > 0

答案 1 :(得分:0)

您的代码确实存在问题:

for i in range(nums):

nums是一个列表,因此您无法使用range。您可以使用range(len(num))然后检查num[0]num[1]等,即

if (nums[i]==2) or (nums[i]==3):

但你可以这样做:

for i in nums:
    if ((i==2) or (i==3)):

确实会浏览nums中的所有值。

您无需浏览所有值并查看:

if (2 in nums) or (3 in nums):

最后,您可以跳过测试,只需执行以下操作:

return ((2 in nums) or (3 in nums))