[英]Group numbers if they are permutations of each other in Python
我有一個數字列表,比如[1091, 2053, 4099, 4909, 5023, 9011]
。 在這里,每個數字也在列表中進行排列。 現在,我想將這些排列彼此分組,因此列表變為[[1091, 9011], [2053, 5023], [4099, 4909]]
。 我知道如何使用groupby
和permutations
,但不知道,它們對於groupby
應該是什么關鍵,或者我應該如何以其他方式解決問題。
注意:數字應為精確排列,112和121計數,但112和122則不然。
如何對列表中的數字排列進行分組?
import itertools as it
a = [1091, 2053, 4099, 4909, 5023, 9011]
sort_string = lambda x: sorted(str(x))
[[int(x) for x in v] for k,v in it.groupby(sorted(a, key=sort_string), key=sort_string)]
# [[1091, 9011], [2053, 5023], [4099, 4909]]
您可以使用collections.Counter
將每個數字表示為integer, total_occurrences
的元組,然后將所有數據存儲在字典的實例中:
from collections import Counter, defaultdict
dest = defaultdict(list)
data = [1091, 2053, 4099, 4909, 5023, 9011]
data = ((Counter([int(x) for x in str(datum)]), datum) for datum in data)
for numbers, value in data:
numbers = tuple(sorted(numbers.items()))
dest[numbers].append(value)
print dest.values()
# [[1091, 9011], [2053, 5023], [4099, 4909]]
用適合您目的的歸一化表示每個數字。 在您的示例中,合適的規范形式可以是"".join(sort("".split(str(n))))
; 也就是說,將每個數字映射到由各個數字的排序列表組成的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.