【问题标题】:Unusual permutations不寻常的排列
【发布时间】:2016-08-28 09:54:43
【问题描述】:

我的清单很少:

a = [1,2,3]
b = [4,5,6]
c = [7,8,9,10]

如何生成所有组合,例如:

a[0], b[0]
a[1], b[1]
a[2], b[2]
a[0], b[0], c[0]
a[1], b[1], c[0]
a[2], b[2], c[0]
a[1], b[1], c[1]
a[2], b[2], c[2]
a[0], b[0], c[3]
a[1], b[1], c[3]
a[2], b[2], c[3]
.....

每个列表一次只能有一个值。

想象两个或多个列表,例如 a=[1,2,3] 和 b=[4,5,6] 和 c=[7,8,9],我想要所有可能的对,例如 (a[0 ], b[0]),(a[1], b[1]), (a[0], b[0], c[0])...

【问题讨论】:

  • itertools.permutations,需要长度。根据侧边栏也复制了stackoverflow.com/questions/104420/…
  • 这有什么不寻常的,这与 SO 上的所有其他排列问题有何不同?
  • 我希望 a* 在列表中只出现一次。不能是 a1、a2、a3 或 b1,b2,c1
  • 'a1'之类的东西是你真实的字符串模式吗,也就是说,你如何在你的真实场景中指定'a''*'是什么?
  • 您可能应该为此使用itertools.product,但仍不清楚您想要什么组合。输出应该包含 (a[0], c[0]) 还是 (b[0], c[0])?顺便说一句,(a[0], b[0], c[0]) 包含 3 个项目,所以它不是一对。

标签: python algorithm combinations permutation


【解决方案1】:

根据您的示例,您似乎只需要 abc-type 排列。所以你要么:1)显式构建你的“排列”,要么2)构建所有排列并过滤掉你不想要的。

显式构造

  1. 建立你的list_of_lists,即[['a1', 'a2', 'a3'], ['b1', 'b2'], ['c1']]
  2. 构建您的排列。使用itertools.product,见All combinations of a list of lists
  3. 从您的每个排列中,您可能希望在一个循环中创建多个排列。例如,从('a1','b1','c1') 得到('a1','b1','c1')('a1','b1')。这很容易。

你可以填补空白。

构建所有并过滤掉

... 可能仅在您需要与我理解的(稍微)不同的东西时才有用。

【讨论】:

  • 太棒了!!这就是我的意思
【解决方案2】:

不确定我是否正确理解了您的问题,但您的意思是这样吗?

from itertools import permutations

my_list = ['a1', 'a2', 'a3', 'b1', 'b2', 'c1']

for i in range(len(my_list)):
    print(list(permutations(my_list, i)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多