【发布时间】:2012-10-07 18:18:17
【问题描述】:
我无法理解我正在尝试实现的算法。我有两个列表,想从这两个列表中获取特定的组合。
这是一个例子。
names = ['a', 'b']
numbers = [1, 2]
这种情况下的输出是:
[('a', 1), ('b', 2)]
[('b', 1), ('a', 2)]
我的名字可能比数字多,即len(names) >= len(numbers)。这是一个包含 3 个名称和 2 个数字的示例:
names = ['a', 'b', 'c']
numbers = [1, 2]
输出:
[('a', 1), ('b', 2)]
[('b', 1), ('a', 2)]
[('a', 1), ('c', 2)]
[('c', 1), ('a', 2)]
[('b', 1), ('c', 2)]
[('c', 1), ('b', 2)]
【问题讨论】:
-
@dm03514 我看到了,并使用 itertools 找到了一些类似目标的示例,但我在 python 中进行原型设计,但会用另一种语言编写最终代码,所以我不想使用任何工具没有其他方法。
-
您所要求的实际上没有意义。如果第一个列表包含 A、B、C,而第二个列表包含 1,2,您希望得到什么结果?如果您给出的示例有 4 个不同的结果,每个结果是一个字母和一个数字(A1、A2、B1、B2),或者两个列表必须具有相同的大小,则可以这样做。
-
我同意 interjay。请在大小不等的情况下说明结果,否则无法提供通用解决方案。
-
请注意,以后的人会重复这个问题:Get the cartesian product of a series of lists? 很有可能是一个更好的复制目标(很多应该使用
product的东西在这里被复制了,甚至虽然这个问题没有以这种方式得到妥善解决)。在极少数情况下,All possible replacements of two lists? 可能会更好(当从每个索引的两个列表之一中选择一个值时,这又是一个product解决方案,带有zip预传递)。
标签: python list algorithm itertools combinatorics