Python:清单项目集的所有可能组合

时间:2018-07-13 06:07:36

标签: python

有一本字典

ages = {
    "45-64": 0.025671085927991368,
    "65+": 0.0018149553095834115,
    "35-44": 0.040190728404658656,
    "18-24": 0.37733412203543515,
    "13-17": 0.35014384408604765,
    "25-34": 0.20484526423628374
   }

我需要从中获取密钥(年龄组列表)“ 45-64”,“ 65 +”,“ 35-44”,“ 18-24”,“ 13-17”,“ 25- 34“。如何从中获得所有可能的唯一组合,其元素由年龄线分开: 像这样:

age18-24age35-44
age13-17age25-34age35-44age65-
age18-24age35-44
age13-17age25-34age45-54age65-
age13-17age18-24age25-34age55-64age65-
....
....

排序顺序并不重要,最重要的是唯一性。那些。 age18-24age35-44和age35-44age18-24是重复的,因为它们的值之和是相同的。

2 个答案:

答案 0 :(得分:3)

from itertools import combinations
from pprint import pprint
pprint([''.join(map('age'.__add__, a)) for i in range(2, len(ages) + 1) for a in combinations(ages, i)])

这将输出:

['age45-64age65+',
 'age45-64age35-44',
 'age45-64age18-24',
 'age45-64age13-17',
 'age45-64age25-34',
 'age65+age35-44',
 'age65+age18-24',
 'age65+age13-17',
 'age65+age25-34',
 'age35-44age18-24',
 'age35-44age13-17',
 'age35-44age25-34',
 'age18-24age13-17',
 'age18-24age25-34',
 'age13-17age25-34',
 'age45-64age65+age35-44',
 'age45-64age65+age18-24',
 'age45-64age65+age13-17',
 'age45-64age65+age25-34',
 'age45-64age35-44age18-24',
 'age45-64age35-44age13-17',
 'age45-64age35-44age25-34',
 'age45-64age18-24age13-17',
 'age45-64age18-24age25-34',
 'age45-64age13-17age25-34',
 'age65+age35-44age18-24',
 'age65+age35-44age13-17',
 'age65+age35-44age25-34',
 'age65+age18-24age13-17',
 'age65+age18-24age25-34',
 'age65+age13-17age25-34',
 'age35-44age18-24age13-17',
 'age35-44age18-24age25-34',
 'age35-44age13-17age25-34',
 'age18-24age13-17age25-34',
 'age45-64age65+age35-44age18-24',
 'age45-64age65+age35-44age13-17',
 'age45-64age65+age35-44age25-34',
 'age45-64age65+age18-24age13-17',
 'age45-64age65+age18-24age25-34',
 'age45-64age65+age13-17age25-34',
 'age45-64age35-44age18-24age13-17',
 'age45-64age35-44age18-24age25-34',
 'age45-64age35-44age13-17age25-34',
 'age45-64age18-24age13-17age25-34',
 'age65+age35-44age18-24age13-17',
 'age65+age35-44age18-24age25-34',
 'age65+age35-44age13-17age25-34',
 'age65+age18-24age13-17age25-34',
 'age35-44age18-24age13-17age25-34',
 'age45-64age65+age35-44age18-24age13-17',
 'age45-64age65+age35-44age18-24age25-34',
 'age45-64age65+age35-44age13-17age25-34',
 'age45-64age65+age18-24age13-17age25-34',
 'age45-64age35-44age18-24age13-17age25-34',
 'age65+age35-44age18-24age13-17age25-34',
 'age45-64age65+age35-44age18-24age13-17age25-34']

答案 1 :(得分:2)

您可以结合使用itertools.combinationsitertools.product来完成

from itertools import combinations, chain
l = ages.keys()
l2 = list(chain(*[['age'.join(('',)+c) for c in combinations(l,i)] for i in range(2, len(l))]))

from pprint import pprint
pprint(l2)

输出

['age45-64age65+',
 'age45-64age35-44',
 'age45-64age18-24',
 'age45-64age13-17',
 'age45-64age25-34',
 'age65+age35-44',
 'age65+age18-24',
 'age65+age13-17',
 'age65+age25-34',
 'age35-44age18-24',
 'age35-44age13-17',
 'age35-44age25-34',
 'age18-24age13-17',
 'age18-24age25-34',
 'age13-17age25-34',
 'age45-64age65+age35-44',
 'age45-64age65+age18-24',
 'age45-64age65+age13-17',
 'age45-64age65+age25-34',
 'age45-64age35-44age18-24',
 'age45-64age35-44age13-17',
 'age45-64age35-44age25-34',
 'age45-64age18-24age13-17',
 'age45-64age18-24age25-34',
 'age45-64age13-17age25-34',
 'age65+age35-44age18-24',
 'age65+age35-44age13-17',
 'age65+age35-44age25-34',
 'age65+age18-24age13-17',
 'age65+age18-24age25-34',
 'age65+age13-17age25-34',
 'age35-44age18-24age13-17',
 'age35-44age18-24age25-34',
 'age35-44age13-17age25-34',
 'age18-24age13-17age25-34',
 'age45-64age65+age35-44age18-24',
 'age45-64age65+age35-44age13-17',
 'age45-64age65+age35-44age25-34',
 'age45-64age65+age18-24age13-17',
 'age45-64age65+age18-24age25-34',
 'age45-64age65+age13-17age25-34',
 'age45-64age35-44age18-24age13-17',
 'age45-64age35-44age18-24age25-34',
 'age45-64age35-44age13-17age25-34',
 'age45-64age18-24age13-17age25-34',
 'age65+age35-44age18-24age13-17',
 'age65+age35-44age18-24age25-34',
 'age65+age35-44age13-17age25-34',
 'age65+age18-24age13-17age25-34',
 'age35-44age18-24age13-17age25-34',
 'age45-64age65+age35-44age18-24age13-17',
 'age45-64age65+age35-44age18-24age25-34',
 'age45-64age65+age35-44age13-17age25-34',
 'age45-64age65+age18-24age13-17age25-34',
 'age45-64age35-44age18-24age13-17age25-34',
 'age65+age35-44age18-24age13-17age25-34']