【发布时间】:2017-02-22 15:10:28
【问题描述】:
目标:我想获得(或能够使用)一组从字符串列表中获得的所有可能排列。
Python 示例:
import pandas as pd
import itertools
list1 = ['A', 'A', 'B', 'B']
# Get all permutations
list1_perm = list(itertools.permutations(list1))
len(list1_perm)
24
list1_perm
[('A', 'A', 'B', 'B'),
('A', 'A', 'B', 'B'),
('A', 'B', 'A', 'B'),
('A', 'B', 'B', 'A'),
('A', 'B', 'A', 'B'),
('A', 'B', 'B', 'A'),
('A', 'A', 'B', 'B'),
('A', 'A', 'B', 'B'),
('A', 'B', 'A', 'B'),
('A', 'B', 'B', 'A'),
('A', 'B', 'A', 'B'),
('A', 'B', 'B', 'A'),
('B', 'A', 'A', 'B'),
('B', 'A', 'B', 'A'),
('B', 'A', 'A', 'B'),
('B', 'A', 'B', 'A'),
('B', 'B', 'A', 'A'),
('B', 'B', 'A', 'A'),
('B', 'A', 'A', 'B'),
('B', 'A', 'B', 'A'),
('B', 'A', 'A', 'B'),
('B', 'A', 'B', 'A'),
('B', 'B', 'A', 'A'),
('B', 'B', 'A', 'A')]
由于我的分析('A', 'A', 'B', 'B')与('A', 'A', 'B', 'B')相同,(虽然'A'可能改变了位置),所以我这样做:
# Get set of permutations
set1_perm = set(itertools.permutations(list1))
len(set1_perm)
6
set1_perm
{('A', 'A', 'B', 'B'),
('A', 'B', 'A', 'B'),
('A', 'B', 'B', 'A'),
('B', 'A', 'A', 'B'),
('B', 'A', 'B', 'A'),
('B', 'B', 'A', 'A')}
现在这很好,但我要处理的列表有 481 个字符串,其中有 5 个不同频率的唯一字符串:
len(real_list)
481
len(set(real_list))
5
# Count number of times each unique value appears
pd.Series(real_list).value_counts()
A 141
B 116
C 80
D 78
E 66
这对itertools.permutations(real_list) 来说不是问题,但是当我想获得set 时,需要很长时间。这是因为排列的数量是9.044272819E+1082。
我想做的是: 首先,我想知道该排列空间中唯一元素的数量,即集合的长度。要获得独特元素的数量,可以通过分析来完成,但是由于每个独特元素的频率不同,我不知道如何做到这一点。
其次,我希望能够获得排列集中那些独特元素的样本。
如果能提供任何帮助,我将不胜感激。
最好, 亚历杭德罗
【问题讨论】:
标签: python r set permutation itertools