0

我有一个数字列表,比方说[1091, 2053, 4099, 4909, 5023, 9011]。这里每个数字在列表中也有它的排列。现在我想将这些排列组合在一起,所以列表变为[[1091, 9011], [2053, 5023], [4099, 4909]]. 我知道如何使用groupbyand permutations,但不知道它们的关键是什么,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 回答