我正在创建一个布尔函数,用于检查列表中的每个元素是否大于1且小于6.此外,列表是正整数,而不是负数,0,字符串或其他任何内容。
我觉得我已经尝试了几乎所有东西而无法找到我的解决方案。这就是我现在暂时拥有的。
def checkList(aList):
for i in aList:
if i < 1:
return False
elif i > 6:
return False
else:
return True
答案 0 :(得分:3)
使用生成器表达式构建元素的中间列表,然后针对all
检查它们,看它们是否适合您的约束。
def check_list(li):
return all((type(i) == int and 1 < i < 6 for i in li))
答案 1 :(得分:2)
all
使用isinstance(i, int)
检查的单个生成器表达式是每个元素都是一个int 1 <= i <= 6
以确保每个int都在1-6范围内:
def checkList(aList):
return all(isinstance(i, int) and 1 < i < 6 for i in aList)
all
将短路并为任何非int或任何小于1或大于5的值返回False,如果所有元素都是整数且在1-6范围内,则返回True。
在您自己的代码中,如果您要检查我的列表中的每个元素是否大于1且小于6 ,那么您正在检查if i < 1
和elif i > 6
所以if i < 2
和elif i > 5
返回False,1不小于1,6大于5,所以要纠正自己的逻辑并检查整数。
def checkList(aList):
for i in aList:
if not isinstance(i, int):
return False
if i < 2:
return False
if i > 5:
return False
return True # outside loop
你需要移动返回True外部循环,因为一个是int 在1到6之间并不意味着它们都是。
可以改写为:
def checkList(aList):
for i in aList:
if not isinstance(i, int):
return False
if 2 > i > 5:
return False
return True
答案 2 :(得分:1)
这对你有用
<div id="container">
<div id="A"></div>
<div id="B"></div>
<div id="C"></div>
<div class="D"></div>
</div>
<div id="output"></div>
这里重要的概念是def check_sequence(sequence, low, high):
if all(isinstance(i, int) for i in sequence):
return all(low < i < high for i in sequence)
else:
return False
print(check_sequence([2, 5, 4, 3, 3], 1, 6))
>> True
。在Python中,您可以指定变量之间的值范围。
答案 3 :(得分:0)
你可以使用filter它会像这样
filtered = filter(seq, lambda x: 1 < int(x) < 6)
这将返回一个筛选列表,其中只包含介于1和6之间的项目。然后,您可以检查列表是否具有相同的长度,以查看是否删除了任何内容。
走这条路,你的功能看起来像这样:
def checkList(seq):
filtered = filter(seq, lambda x: 1 < int(x) < 6)
return len(filteted) == len(seq)