【问题标题】:Outputting all possible permutations of multiple lists输出多个列表的所有可能排列
【发布时间】:2017-11-26 04:08:17
【问题描述】:

我对 Python 非常陌生,刚刚购买了我的第一本“Python 速成课程”一书 - 最初我选择的语言是 PHP。

我的目标:

我想要一个脚本,它会在屏幕上输出特定模式的所有可能排列的列表。顺序不重要。

原始数据和模式(数据集不会改变):

List1 = ['CA', 'CB', 'CC', 'CD', 'CE', 'CF', 'CG', 'CH', 'CJ', 'CK', 'CL', 'CM', 'CN', 'CO', 'CP', 'CR', 'CS', 'CT', 'CU', 'CV', 'CW', 'CX', 'CY']
List2 = ['51', '02', '52', '03', '53', '04', '54', '05', '55', '06', '56', '07', '57', '08', '58', '09', '59', '10', '60', '11', '61', '12', '62', '13', '63', '14', '64', '15', '65', '16', '66', '17']
List3 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
List4 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
List5 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

字符串输出:

[列表1] + [列表2] + [列表3] + [列表4] + [列表5]

示例:

导致大量 7 个字符的字母数字字符串

  • CH07YCD
  • CT11MPP

废话数学:

我要查看 10,174,464 个条目,我的数学计算是否正确? List1(23) x List2(32) x List3,4,5(13,824)。

我的问题:

itertools 是最好的功能吗?如果是这样,怎么做?如果不是,那是什么?

【问题讨论】:

  • 我可以确认你的数学
  • 在相当慢的笔记本电脑上,通过蛮力 5 for 循环方法创建您想要的列表大约需要 4 秒。如果您的数据已设置,只需暴力破解即可。

标签: python list loops permutation itertools


【解决方案1】:
>>> import itertools
>>> s = [List1, List2, List3, List4, List5]
>>> n = list(itertools.product(*s))
>>> len(n)
10174464

itertools.product -> 大致相当于生成器表达式中的嵌套 for 循环。

【讨论】:

  • Saket,我对你的反应速度感到震惊。谢谢! 10,174,464 是我得到的 - 要么是那个,要么我们都对数学不满意 :) 如何在屏幕上输出每个条目?
  • @ZanderG for i in n: print(i)
  • @Coldspeed 谢谢 :)
  • n 是字符串集的列表。您必须遍历列表并对每组中的每个项目执行连接,然后打印。所以 "for i in n: print("".join(i))" 应该这样做。
  • 只是为了使它成为一个单行:D for i in list(product(*[List1, List2, List3, List4, List5])): print(i)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
相关资源
最近更新 更多