【问题标题】:Python: Various Lists To Cartesian Product, Variable LengthPython:笛卡尔积的各种列表,可变长度
【发布时间】:2013-05-10 12:13:34
【问题描述】:

我想从三个不同的数组中创建单词或更确切地说是组合。输出应该是一个笛卡尔积,它本身和另一个长度可变的数组。示例:

array1 = ["a", "b", "c"]
array2 = ["x", "y", "z"]
Cartesian product of both, length 3: aaa, aab, aac ... axb, axc, axx... zzx, zzy, zzz

你能指出我正确的方向吗?

【问题讨论】:

  • 笛卡尔积不包含重复元素,并且是固定长度的。我不知道你的问题是否有自己的名字。 CP 将是ax, ay, az, bx, by ... cz。排列是元素的重新排序,例如从 abc 到 (abc, acb, cab, cba, bac, bca)。您的示例对排序不是很清楚(aac 和 aca 是解决方案的不同元素),但看起来好像。
  • 是的,这些肯定是不同的元素,至少根据我在这里的定义。我知道笛卡尔积的定义不同,但我不知道它有什么名字。重复排列似乎很合适,但它使用了多个列表,因此并不完全清楚。
  • 对不起:Different Arrays,不是different elements - 我引入了这个错误。

标签: python product variable-length


【解决方案1】:

itertools 模块有 product 方法,可以满足您的需要。

>>> from itertools import product
>>> [''.join(items) for items in product(array1 + array2, repeat=3)]
['aaa', 'aab', 'aac', 'aax', 'aay', 'aaz', 'aba', 'abb', 'abc', 'abx', 'aby', 'abz', 'aca', 'acb', 'acc', 'acx', 'acy', 'acz', 'axa', 'axb', 'axc', 'axx', 'axy', 'axz', 'aya', 'ayb', 'ayc', 'ayx', 'ayy', 'ayz', 'aza', 'azb', 'azc', 'azx', 'azy', 'azz', 'baa', 'bab', 'bac', 'bax', 'bay', 'baz', 'bba', 'bbb', 'bbc', 'bbx', 'bby', 'bbz', 'bca', 'bcb', 'bcc', 'bcx', 'bcy', 'bcz', 'bxa', 'bxb', 'bxc', 'bxx', 'bxy', 'bxz', 'bya', 'byb', 'byc', 'byx', 'byy', 'byz', 'bza', 'bzb', 'bzc', 'bzx', 'bzy', 'bzz', 'caa', 'cab', 'cac', 'cax', 'cay', 'caz', 'cba', 'cbb', 'cbc', 'cbx', 'cby', 'cbz', 'cca', 'ccb', 'ccc', 'ccx', 'ccy', 'ccz', 'cxa', 'cxb', 'cxc', 'cxx', 'cxy', 'cxz', 'cya', 'cyb', 'cyc', 'cyx', 'cyy', 'cyz', 'cza', 'czb', 'czc', 'czx', 'czy', 'czz', 'xaa', 'xab', 'xac', 'xax', 'xay', 'xaz', 'xba', 'xbb', 'xbc', 'xbx', 'xby', 'xbz', 'xca', 'xcb', 'xcc', 'xcx', 'xcy', 'xcz', 'xxa', 'xxb', 'xxc', 'xxx', 'xxy', 'xxz', 'xya', 'xyb', 'xyc', 'xyx', 'xyy', 'xyz', 'xza', 'xzb', 'xzc', 'xzx', 'xzy', 'xzz', 'yaa', 'yab', 'yac', 'yax', 'yay', 'yaz', 'yba', 'ybb', 'ybc', 'ybx', 'yby', 'ybz', 'yca', 'ycb', 'ycc', 'ycx', 'ycy', 'ycz', 'yxa', 'yxb', 'yxc', 'yxx', 'yxy', 'yxz', 'yya', 'yyb', 'yyc', 'yyx', 'yyy', 'yyz', 'yza', 'yzb', 'yzc', 'yzx', 'yzy', 'yzz', 'zaa', 'zab', 'zac', 'zax', 'zay', 'zaz', 'zba', 'zbb', 'zbc', 'zbx', 'zby', 'zbz', 'zca', 'zcb', 'zcc', 'zcx', 'zcy', 'zcz', 'zxa', 'zxb', 'zxc', 'zxx', 'zxy', 'zxz', 'zya', 'zyb', 'zyc', 'zyx', 'zyy', 'zyz', 'zza', 'zzb', 'zzc', 'zzx', 'zzy', 'zzz']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 2017-07-15
    • 2012-01-03
    • 2021-10-22
    • 2011-07-10
    相关资源
    最近更新 更多