使用固定大小,6个元素,一组数字(元组或列表),从1-49号范围创建,不能重复。
实施例
[1, 13, 24, 25, 19, 48]
(1, 13, 24, 25, 19, 48)
我们如何检查所有十进制是否在元组/列表中表示?
通过十分位数我的意思是数字组:
我尝试了什么(我认为它有效,我仍然可以提出可能更好答案的问题):
def checkAllDecilesRepresented(tuple):
d0 = 0
d1 = 0
d2 = 0
d3 = 0
d4 = 0
for i in tuple:
if 0 < i < 10:
d0 = d0 + 1
if 9 < i < 20:
d1 = d1 + 1
if 19 < i < 30:
d2 = d2 + 1
if 29 < i < 40:
d3 = d3 + 1
if 39 < i < 50:
d4 = d4 + 1
return d0 and d1 and d2 and d3 and d4
答案 0 :(得分:6)
你可以通过10分来找出一个数字所属的十分位数:
>>> seq = [1, 13, 24, 25, 19, 48]
>>> deciles = {x//10 for x in seq}
>>> deciles
{0, 1, 2, 4}
>>> deciles == set(range(5))
False
由于我们知道所有数字都是&gt; = 1,因此我们不必担心0的十进制数也会为0。
答案 1 :(得分:5)
s = set(x//10 for x in l) # get the deciles
all(x in s for x in range(5)) # check all deciles
为您的示例返回False
。
答案 2 :(得分:2)
无需创建第二组或迭代第一组
alldeciles = len({x // 10 for x in l}) == 5
编辑:
变成了一个lambda:
alldec = lambda l, upperlimit: len({x // 10 for x in l}) == upperlimit // 10
适用于这个问题:
l = [1, 13, 24, 25, 19, 48]
alldeciles = alldec(l, 50)
答案 3 :(得分:0)
替代方法是使用numpy。在你的情况下,考虑到极端情况,两个十分位之间的差异不能大于19.你可以使用numpy来计算两个邻居数的差异。
import numpy
olist = [1, 13, 24, 25, 19, 48]
diff = numpy.diff(sorted(olist))
print (v < 20).all()
这会让False
退回给您。