Python 如何检查一组数字是否由每一个十分位数表示?

Python 如何检查一组数字是否由每一个十分位数表示?,python,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

对于固定大小、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

对于您的示例,它将返回False。

您可以通过地板除以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

因为我们知道所有的数字都>=1,所以我们不必担心0也会有一个十分位数0的事实。

另一种方法是使用numpy。在你的情况下,考虑到极端情况,十分之二的差值不能大于19。您可以使用numpy计算两个相邻数字的差值

import numpy
olist = [1, 13, 24, 25, 19, 48]
diff = numpy.diff(sorted(olist))

print (v < 20).all()

这将向您返回False。

无需创建第二个集合或迭代第一个集合

对于l}=5的x,所有十位数=len{x//10 编辑:

变成了一只羔羊:

alldec = lambda l, upperlimit: len({x // 10 for x in l}) == upperlimit // 10
适用于该问题:

l = [1, 13, 24, 25, 19, 48]
alldeciles = alldec(l, 50)

[1,13,24,25,19,48]是一个列表,而不是一个tuple@rbp我将把它作为一个列表,因为答案已经使用了listvery pythonic。您还可以使用set difference setrange5-deciles==set来完成此操作。在需要检查的十分位数非常大的情况下,此方法可能会更快,因为它不需要具体化要比较的集合。
l = [1, 13, 24, 25, 19, 48]
alldeciles = alldec(l, 50)