繁体   English   中英

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

[英]Python, Checking if any elements in a list are contained in another list

从codingbat网页的列表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社区的人们),但是我真的不明白我写的定义有什么问题。

可以请人帮忙吗?

问题是您只是检查第一个值,然后返回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

[注意]

我测试用的λ这个问题,这里是测试任意数量的检查的方法:这将检查是否有元素to_checklst

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

您的代码确实存在问题:

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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM