Python:按十位数分组数字的函数

时间:2019-01-16 02:56:04

标签: python list for-loop if-statement logical-operators

获取数字列表,并将数字按其十位数分组,并为每个十位数提供自己的子列表。

例如:

$ group_by_10s([1, 10, 15, 20])
[[1], [10, 15], [20]]
$ group_by_10s([8, 12, 3, 17, 19, 24, 35, 50])
[[3, 8], [12, 17, 19], [24], [35], [], [50]]

我的方法:

limiting = 10
ex_limiting = 0
result = []
for num in lst:
    row = []
    for num in lst:
        if num >= ex_limiting and num <= limiting:
            row.append(num)
            lst.remove(num)
    result.append(row)
    ex_limiting = limiting
    limiting += 10

但是它返回[[1],[10,20]]。 我的方法有什么问题,我该如何解决?

5 个答案:

答案 0 :(得分:3)

您可能已经有了正确的答案,但这是另一种解决方案:

def group_by_10s(mylist):
    result = []
    decade = -1
    for i in sorted(mylist):
        while i // 10 != decade:
            result.append([])
            decade += 1
        result[-1].append(i)
    return result

group_by_10s([8, 12, 3, 17, 19, 24, 35, 50])
#[[3, 8], [12, 17, 19], [24], [35], [], [50]]

它只使用普通的Python,没有额外的模块。

答案 1 :(得分:2)

您可以使用列表理解:

def group_by_10s(_d):
  d = sorted(_d)
  return [[c for c in d if c//10 == i] for i in range(min(_d)//10, (max(_d)//10)+1)]

print(group_by_10s([1, 10, 15, 20]))
print(group_by_10s([8, 12, 3, 17, 19, 24, 35, 50]))
print(group_by_10s(list(range(20))))

输出:

[[1], [10, 15], [20]]
[[3, 8], [12, 17, 19], [24], [35], [], [50]]
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]]

答案 2 :(得分:0)

建议不要在循环期间迭代列表。 最后,对于任何想要答案的人,我都会得到这个答案。 感谢您的支持!

def group_by_10s(numbers):
  external_loop = int(max(numbers)/10)
  limiting = 10
  ex_limiting = 0
  result = []
  for external_loop_count in range(external_loop+1):
    row = []
    for num in numbers:
        if num >= ex_limiting and num < limiting:
            row.append(num)
            row.sort()
    result.append(row)
    ex_limiting = limiting
    limiting += 10
  return(result)

答案 3 :(得分:0)

这个怎么样?

numbers = [8, 12, 3, 17, 19, 24, 35, 50]


def group_by_10s(numbers):
    arr = []
    for i in range((max(numbers) / 10) + 1):
        arr.append([])

    numbers.sort()

    for number in numbers:
        if number < 10:
            arr[0].append(number)
        else:
            index = number / 10
            arr[index].append(number)

    return arr


print group_by_10s(numbers)
# [[3, 8], [12, 17, 19], [24], [35], [], [50]]

答案 4 :(得分:-1)

在遍历列表时不要修改列表,因为从列表中删除项目时,某些项目会被跳过。同时更改边界,以便仅在row时附加到num < limiting。在添加到result之前,我将添加检查以确保列表中包含元素:

for num in lst:
    row = []
    for num in lst:
         if num >= ex_limiting and num < limiting:
             row.append(num)
    if len(row) > 0 :
        result.append(row)
    ex_limiting = limiting
    limiting += 10

这将产生:

[[1], [10, 15], [20]]