解压和组合嵌套元组的通用方法

1 投票
4 回答
1318 浏览
提问于 2025-04-16 16:43

我生成了三个字典的笛卡尔积,结果是这样的:

import itertools
combined = list(itertools.product(foo, bar, baz))

所以现在我的列表看起来是:

[(('text a', 'value a'), ('text b', 'value b'), ('text c', 'value c')), … ]

我想做的是把这个列表拆开,最终得到一个包含扁平化嵌套元组的文本和数值的列表:

[['text a text b text c', 'value a value b value c'], … ]

有没有什么高效的方法可以做到这一点?

后续问题(看到Dan D.的回答后):

如果我的元组看起来是这样的

(('text a', float a), ('text b', float b), ('text c', float c ))

而我想要的是把浮点数相加,而不是简单地连接这些值,这该怎么做呢?

4 个回答

1

这里有一个概括:

def combine(functions, data):
    for elements in data:
        yield [f(e) for f, e in zip(functions, zip(*elements))]

# A simple function for demonstration.
def pipe_join(args):
    return '|'.join(args)

some_data = [
    (('A', 10), ('B', 20), ('C', 30)),
    (('D', 40), ('E', 50), ('F', 60)),
    (('G', 70), ('H', 80), ('I', 90)),
]

for c in combine( [pipe_join, sum], some_data ):
    print c
4

在编程中,有时候我们会遇到一些问题,像是代码运行不正常或者出现错误。这种情况下,我们可以去一些技术论坛,比如StackOverflow,寻求帮助。在这些论坛上,很多人会分享他们的经验和解决方案。

当你在这些论坛上提问时,记得要把你的问题描述清楚。比如,告诉大家你在做什么,遇到了什么问题,以及你尝试过哪些解决办法。这样,其他人才能更好地理解你的情况,给出有效的建议。

另外,看到别人提问时,如果你有相关的经验,也可以主动帮助他们。这样不仅能让你更深入地理解问题,还能建立起良好的社区氛围。

总之,技术论坛是一个互相学习和帮助的地方,大家可以在这里分享知识,共同进步。

map(lambda v: map(' '.join, zip(*v)), combined)
3

你不需要把所有东西都挤在一行里:

def combine(items):
    for tuples in items:
        text, numbers = zip(*tuples)
        yield ' '.join(text), sum(numbers)

print list(combine(product( ... )))

撰写回答