首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:函数按十位对数字进行分组。

Python:函数按十位对数字进行分组。
EN

Stack Overflow用户
提问于 2019-01-16 02:56:03
回答 5查看 877关注 0票数 1

获取一个数字列表,并将数字按其数十个位置分组,给出它自己的子列表中的每一个十位。

例:

代码语言:javascript
复制
$ 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]]

我的方法:

代码语言:javascript
复制
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]。我的方法有什么问题,我该如何解决?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-01-16 03:05:45

您可能已经有了正确的答案,但这里有一个替代解决方案:

代码语言:javascript
复制
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,不使用额外的模块。

票数 3
EN

Stack Overflow用户

发布于 2019-01-16 03:04:52

您可以使用列表理解:

代码语言:javascript
复制
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)]
代码语言:javascript
复制
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))))

输出:

代码语言:javascript
复制
[[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
EN

Stack Overflow用户

发布于 2019-01-16 03:19:59

请注意循环期间不迭代列表的建议。我最终得到了这个答案,对于任何想要答案的人来说。谢谢你的支持!

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54209786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档