首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python中两个列表的排列

python中两个列表的排列
EN

Stack Overflow用户
提问于 2009-12-23 22:44:12
回答 4查看 55.6K关注 0票数 44

我有两个列表,如:

代码语言:javascript
复制
list1 = ['square','circle','triangle']
list2 = ['red','green']

如何创建这些列表的所有排列,如下所示:

代码语言:javascript
复制
[
  'squarered', 'squaregreen',
  'redsquare', 'greensquare',
  'circlered', 'circlegreen',
  'redcircle', 'greencircle',
  'trianglered', 'trianglegreen',
  'redtriangle', 'greentriangle'
]

我可以使用itertools来做这件事吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-23 22:54:42

代码语言:javascript
复制
>>> import itertools
>>> map(''.join, itertools.chain(itertools.product(list1, list2), itertools.product(list2, list1)))
['squarered', 'squaregreen', 'circlered',
'circlegreen', 'trianglered', 'trianglegreen',
'redsquare', 'redcircle', 'redtriangle', 'greensquare',
'greencircle', 'greentriangle']
票数 43
EN

Stack Overflow用户

发布于 2009-12-23 22:50:02

怎么样

代码语言:javascript
复制
[x + y for x in list1 for y in list2] + [y + x for x in list1 for y in list2]

IPython交互示例:

代码语言:javascript
复制
In [3]: list1 = ['square', 'circle', 'triangle']

In [4]: list2 = ['red', 'green']

In [5]: [x + y for x in list1 for y in list2] + [y + x for x in list1 for y in list2]
Out[5]: 
['squarered',
 'squaregreen',
 'circlered',
 'circlegreen',
 'trianglered',
 'trianglegreen',
 'redsquare',
 'greensquare',
 'redcircle',
 'greencircle',
 'redtriangle',
 'greentriangle']
票数 16
EN

Stack Overflow用户

发布于 2009-12-23 22:53:22

我认为您正在寻找的是两个列表的乘积,而不是排列:

代码语言:javascript
复制
#!/usr/bin/env python
import itertools
list1=['square','circle','triangle'] 
list2=['red','green']
for shape,color in itertools.product(list1,list2):
    print(shape+color)

收益率

代码语言:javascript
复制
squarered
squaregreen
circlered
circlegreen
trianglered
trianglegreen

如果你想同时使用squareredredsquare,那么你可以这样做:

代码语言:javascript
复制
for pair in itertools.product(list1,list2):
    for a,b in itertools.permutations(pair,2):
        print(a+b)

或者,将其添加到列表中:

代码语言:javascript
复制
l=[a+b for pair in itertools.product(list1,list2)
   for a,b in itertools.permutations(pair,2)]
print(l)

收益率

代码语言:javascript
复制
['squarered', 'redsquare', 'squaregreen', 'greensquare', 'circlered', 'redcircle', 'circlegreen', 'greencircle', 'trianglered', 'redtriangle', 'trianglegreen', 'greentriangle']
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1953194

复制
相关文章

相似问题

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