我不擅长这些,但请耐心等待。我的数据库/列表中有一组数字,都是4位数字,数字介于和之间,包括0000到9999。
说清单是:
[1234, 4354, 6554, 2134, 3214, 5456, 9911, 1199]
基本上,我想以这种方式对它们进行分组
1234, 2134, 3214 is group A
6554, 5456 is group B
9911, 1199 is group C
4354 is group D
其中每个组中的列表项都包含相同的数字 - 即,组A都由数字1,2,3和4组成。然后我将找到len(组A),len(组) B),len(C组),len(D组)...... 然后以递减的方式对它们进行排序。
怎么做? 如果列表很大,那么该方法仍然可以正常工作吗?
答案 0 :(得分:0)
这是一个(在Python 2.7.10中测试过)解决方案:
def index(number):
digits = list(str(number))
return ''.join(sorted(digits))
groups = {}
numbers = [1234, 4354, 6554, 2134, 3214, 5456, 9911, 1199]
for number in numbers:
key = index(number)
if key not in groups:
groups[key] = []
groups[key].append(number)
print groups.values() # [[1234, 2134, 3214], [4354], [6554, 5456], [9911, 1199]]
此解决方案的关键是获取每个数字的数字并对其进行排序,然后将该结果用作字典键。 index()
只是生成每个数字的数字排序形式的简洁方法。
答案 1 :(得分:0)
不确定您要对命名组做什么,但在将整数转换为字符串并对这些字符进行排序后可以使用itertools.groupby
from itertools import groupby
l = [1234, 4354, 6554, 2134, 3214, 5456, 9911, 1199]
# ints to (int, sorted str)
s = map(lambda x: (x, ''.join(sorted(str(x)))), l)
# sort the list for groupby
s.sort(key=lambda kv: kv[1])
# print out just the ints of the groups
for _, g in groupby(s, lambda kv: kv[1]):
print map(lambda kv: kv[0], g)
输出
[9911, 1199]
[1234, 2134, 3214]
[4354]
[6554, 5456]