首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在三个字符串列表中生成所有可定位的元素组合?

在三个字符串列表中生成所有可定位的元素组合?
EN

Stack Overflow用户
提问于 2017-10-29 20:31:58
回答 3查看 2.4K关注 0票数 0

我需要生成每个字符串列表中每个元素的所有可能组合。

代码语言:javascript
运行
复制
list1 = ['The girl', 'The boy']
list2 = ['wears', 'touches', 'tries']
list3 = ['a red sweater', 'a blue sweater', 'a yellow sweater', 'a white sweater']

因此,结果是将每个元素组合在一起的字符串列表:

代码语言:javascript
运行
复制
The girl wears a red sweater
The boy wears a red sweater
The girl touches a red sweater
The boy touches a red sweater
The girl wears a blue sweater
The boy wears a yellow sweater
(ETC...)

只要得到所有的组合,我就不会特别关心输出的顺序。

从我的研究中,我猜“置换”将是一个解决方案,但我只找到了几个关于数字列表排列或字符串中每个字母组合的答案。这些东西都不是我需要的。我需要合并在列表中排列的文本块。

如何创建一个包含每个字符串列表中不同元素的所有组合的长句子列表?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-29 20:34:58

使用itertools的产品,其简单程度如下:

代码语言:javascript
运行
复制
import itertools
["{x} {y} {z}".format(x=x,y=y,z=z) for x,y,z in itertools.product(list1, list2, list3)]

在python3.6中,您可以删除format调用

代码语言:javascript
运行
复制
[f"{x} {y} {z}" for x,y,z in itertools.product(list1, list2, list3)]
票数 0
EN

Stack Overflow用户

发布于 2017-10-29 20:34:51

只要一堆简单的for循环就行了。诀窍是打印z,y,x的顺序。

代码语言:javascript
运行
复制
list1 = ['The girl', 'The boy']
list2 = ['wears', 'touches', 'tries']
list3 = ['a red sweater', 'a blue sweater', 'a yellow sweater', 'a white sweater']

for x in list3:
    for y in list2:
        for z in list1:
            print (z,y,x)

产出;

代码语言:javascript
运行
复制
The girl wears a red sweater
The boy wears a red sweater
The girl touches a red sweater
The boy touches a red sweater
The girl tries a red sweater
The boy tries a red sweater
The girl wears a blue sweater
The boy wears a blue sweater
The girl touches a blue sweater
The boy touches a blue sweater
The girl tries a blue sweater
The boy tries a blue sweater
The girl wears a yellow sweater
The boy wears a yellow sweater
The girl touches a yellow sweater
The boy touches a yellow sweater
The girl tries a yellow sweater
The boy tries a yellow sweater
The girl wears a white sweater
The boy wears a white sweater
The girl touches a white sweater
The boy touches a white sweater
The girl tries a white sweater
The boy tries a white sweater
票数 2
EN

Stack Overflow用户

发布于 2017-10-29 20:34:51

使用itertools.product,笛卡尔产品的方便工具。然后join产品:

代码语言:javascript
运行
复制
from itertools import product
lst = [' '.join(p) for p in product(list1, list2, list3)]

from pprint import pprint
pprint(lst)
['The girl wears a red sweater',
 'The girl wears a blue sweater',
 'The girl wears a yellow sweater',
 'The girl wears a white sweater',
 'The girl touches a red sweater',
 'The girl touches a blue sweater',
 'The girl touches a yellow sweater',
 'The girl touches a white sweater',
 'The girl tries a red sweater',
 'The girl tries a blue sweater',
 'The girl tries a yellow sweater',
 'The girl tries a white sweater',
 'The boy wears a red sweater',
 'The boy wears a blue sweater',
 'The boy wears a yellow sweater',
 'The boy wears a white sweater',
 'The boy touches a red sweater',
 'The boy touches a blue sweater',
 'The boy touches a yellow sweater',
 'The boy touches a white sweater',
 'The boy tries a red sweater',
 'The boy tries a blue sweater',
 'The boy tries a yellow sweater',
 'The boy tries a white sweater']
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47004945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档