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

2024-09-28 20:54:07 发布

您现在位置:Python中文网/ 问答频道 /正文

在codingbat网页的list 1python中,它要求我编写一个定义,如果两个元素的数组包含数字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社区的人),但我真的不明白我写的定义有什么问题。在

有人能帮忙吗?在


Tags: infalsetrue元素网页forreturn定义
2条回答

问题是您只需检查第一个值,然后返回True或{}。相反,请按以下步骤操作:

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)或者如果您想使用您的循环类型:

^{pr2}$

[注]

我在用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

您的代码确实存在问题:

for i in range(nums):

nums是一个列表,因此不能与它一起使用range。您可以使用range(len(num)),然后检查num[0]num[1],等等

^{pr2}$

但你可以:

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

相关问题 更多 >