简体   繁体   English

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

[英]Python: all possible combinations of list items Set

There is a dictionary 有字典

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

From which I need to take the keys (the list of age groups) "45-64", "65+", "35-44", "18-24", "13-17", "25-34". 我需要从中获取键(年龄组列表)“ 45-64”,“ 65 +”,“ 35-44”,“ 18-24”,“ 13-17”,“ 25-34”。 How can get from it all possible unique combinations whose elements are separated by the age line: Like this: 如何从中获得所有可能的独特组合,其元素由年龄线分隔:像这样:

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

Sorting order is not important, the most important is uniqueness. 排序顺序并不重要,最重要的是唯一性。 Those. 那些。 age18-24age35-44 and age35-44age18-24 is a duplicate, because the sum of their values ​​will be the same. age18-24age35-44和age35-44age18-24是重复项,因为它们的值之和是相同的。

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)])

This outputs: 输出:

['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']

You can combine itertools.combinations and itertools.product to do this 您可以结合使用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)

Output 输出量

['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']

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM