如何用列表的列表调用itertools.product生成句子组合
解决itertools.product生成句子组合的参数传参问题
嗨,我完全懂你的困扰——想通过itertools.product生成所有备选词的句子组合,但直接传嵌套列表得不到预期结果,又不想手动逐个指定几十个子列表参数对吧?
问题根源
你直接调用itertools.product(text_input)时,函数会把text_input里的每个子列表当成单个元素来处理,所以得到的是每个子列表组成的元组,而不是子列表内部元素的笛卡尔积。这和你手动逐个传参的逻辑完全不一样。
解决方案:用解包操作符*
Python的*操作符可以帮你自动把嵌套列表里的每个子列表作为单独参数传给product,完美替代手动逐个输入的麻烦。
直接看代码示例:
import itertools text_input = [['The'], ['apple', 'banana'], ['is'], ['green', 'red']] # 用*解包嵌套列表,将每个子列表作为独立参数传入product raw_combinations = itertools.product(*text_input) # 将每个元组形式的组合拼接成完整句子 sentences = [' '.join(comb) for comb in raw_combinations] print(sentences)
运行这段代码会输出:
['The apple is green', 'The apple is red', 'The banana is green', 'The banana is red']
为什么这个方法管用?
*text_input会把你的嵌套列表“展开”,相当于手动调用itertools.product(text_input[0], text_input[1], text_input[2], ..., text_input[n]),不管你的嵌套列表有多少个子列表(哪怕几十个),这个操作都能自动完成,完全不用重复写参数。
内容的提问来源于stack exchange,提问作者Yanirmr
相关产品推荐
相关产品推荐

