如何检查每个十分位数中是否有一组数字?

时间:2016-01-15 19:42:50

标签: python

使用固定大小,6个元素,一组数字(元组或列表),从1-49号范围创建,不能重复。

实施例

[1, 13, 24, 25, 19, 48]
(1, 13, 24, 25, 19, 48)

我们如何检查所有十进制是否在元组/列表中表示?

通过十分位数我的意思是数字组:

  • 1 - 9
  • 10 - 19
  • 20 - 29
  • 30 - 39
  • 40 - 49

我尝试了什么(我认为它有效,我仍然可以提出可能更好答案的问题):

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

4 个答案:

答案 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退回给您。