首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >两个长度不等的列表之间的排列

两个长度不等的列表之间的排列
EN

Stack Overflow用户
提问于 2012-10-17 21:16:32
回答 8查看 242.6K关注 0票数 225

我在试图实现一个算法时遇到了麻烦。我有两个列表,我想从这两个列表中获取特定的组合。

下面是一个例子。

代码语言:javascript
复制
names = ['a', 'b']
numbers = [1, 2]

在这种情况下,输出将是:

代码语言:javascript
复制
[('a', 1), ('b', 2)]
[('b', 1), ('a', 2)]

我的名字可能比数字多,比如len(names) >= len(numbers)。下面是一个包含3个名称和2个数字的示例:

代码语言:javascript
复制
names = ['a', 'b', 'c']
numbers = [1, 2]

输出:

代码语言:javascript
复制
[('a', 1), ('b', 2)]
[('b', 1), ('a', 2)]
[('a', 1), ('c', 2)]
[('c', 1), ('a', 2)]
[('b', 1), ('c', 2)]
[('c', 1), ('b', 2)]
EN

回答 8

Stack Overflow用户

发布于 2015-12-02 07:57:18

最简单的方法是使用itertools.product

代码语言:javascript
复制
a = ["foo", "melon"]
b = [True, False]
c = list(itertools.product(a, b))
>> [("foo", True), ("foo", False), ("melon", True), ("melon", False)]
票数 612
EN

Stack Overflow用户

发布于 2016-08-21 21:33:40

可能比上面最简单的一个更简单:

代码语言:javascript
复制
>>> a = ["foo", "bar"]
>>> b = [1, 2, 3]
>>> [(x,y) for x in a for y in b]  # for a list
[('foo', 1), ('foo', 2), ('foo', 3), ('bar', 1), ('bar', 2), ('bar', 3)]
>>> ((x,y) for x in a for y in b)  # for a generator if you worry about memory or time complexity.
<generator object <genexpr> at 0x1048de850>

不需要任何导入

票数 202
EN

Stack Overflow用户

发布于 2019-07-24 17:07:21

找出大量列表的所有组合的最佳方法是:

代码语言:javascript
复制
import itertools
from pprint import pprint

inputdata = [
    ['a', 'b', 'c'],
    ['d'],
    ['e', 'f'],
]
result = list(itertools.product(*inputdata))
pprint(result)

结果将是:

代码语言:javascript
复制
[('a', 'd', 'e'),
 ('a', 'd', 'f'),
 ('b', 'd', 'e'),
 ('b', 'd', 'f'),
 ('c', 'd', 'e'),
 ('c', 'd', 'f')]
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12935194

复制
相关文章

相似问题

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