[英]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社区的人们),但是我真的不明白我写的定义有什么问题。
可以请人帮忙吗?
问题是您只是检查第一个值,然后返回True
或False
。 相反,请按照以下步骤操作:
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_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]
等,即
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.