解压和组合嵌套元组的通用方法
我生成了三个字典的笛卡尔积,结果是这样的:
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( ... )))