簡體   English   中英

組號(如果它們在Python中彼此置換)

[英]Group numbers if they are permutations of each other in Python

我有一個數字列表,比如[1091, 2053, 4099, 4909, 5023, 9011] 在這里,每個數字也在列表中進行排列。 現在,我想將這些排列彼此分組,因此列表變為[[1091, 9011], [2053, 5023], [4099, 4909]] 我知道如何使用groupbypermutations ,但不知道,它們對於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM