Python:列表项的所有可能组合

2024-06-02 09:54:25 发布

您现在位置: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-
....
....

排序顺序并不重要,最重要的是唯一性。那些。年龄18-24年龄35-44和年龄35-44年龄18-24是重复的,因为它们的值之和​​会是一样的


Tags: 元素列表字典排序顺序年龄ages年龄组
2条回答
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']

您可以组合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']

相关问题 更多 >