0

私は番号のリストを持っています、としましょう[1091, 2053, 4099, 4909, 5023, 9011]。ここでは、すべての番号のリストにも順列があります。今、私はこれらの順列を互いにグループ化したいので、リストはになり[[1091, 9011], [2053, 5023], [4099, 4909]]ます。私は使い方とを知ってgroupbypermutationsますが、それらが何の鍵となるのか、groupbyまたは他の方法で問題をどのように解決するのかがわかりません。

注:数値は正確な順列である必要があり、112と121はカウントされますが、112と122はカウントされません。

リスト内の数値の順列をグループ化する方法は?

4

3 に答える 3

4
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]]
于 2012-12-13T07:41:19.663 に答える
1

を使用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]]
于 2012-12-13T07:45:05.913 に答える
1

目的に合った正規化で各数値を表します。あなたの例では、適切な標準形式は次のようになり"".join(sort("".split(str(n))))ます。つまり、個々の数字のソートされたリストから作成された文字列に各数値をマップします。

于 2012-12-13T07:53:04.503 に答える