【问题标题】:Python: How to get every combination in listPython:如何获取列表中的每个组合
【发布时间】:2014-02-06 06:09:56
【问题描述】:

我有大量的列表。这里只有几个:

L1=(['G', 'C', 'A'], ['T', 'C'], ['T', 'C'])
L2=(['T', 'C'], ['T', 'C'], ['T', 'C'])

我需要得到这样的列表:(所以基本上每个列表都重复)

L1=['GTT','CTT','ATT','GCC','CCC','ACC','GTC','CTC','ATC','GCT','CCT','ACT']
L2=['TTT','CTT','TCC','CCC','TCT','CTC','TTC','CCT']

【问题讨论】:

  • 在第一个示例中,'CCT', 'GCT', 'ACT' 缺失。

标签: python list combinations permutation


【解决方案1】:

使用itertools.product:

>>> [''.join(x) for x in itertools.product(*L1)]
['GTT', 'GTC', 'GCT', 'GCC', 'CTT', 'CTC', 'CCT', 'CCC', 'ATT', 'ATC', 'ACT', 'ACC']
>>>
>>> [''.join(x) for x in itertools.product(*L2)]
['TTT', 'TTC', 'TCT', 'TCC', 'CTT', 'CTC', 'CCT', 'CCC']

来自文档:

相当于生成器表达式中的嵌套 for 循环。例如,product(A, B) 返回的结果与 ((x,y) for x in A for y in B) 相同。

但是我们使用 * argument unpacked argument of L1 for A, B, C, D...

【讨论】:

    【解决方案2】:

    使用itertools.product:

    >>> L1=(['G', 'C', 'A'], ['T', 'C'], ['T', 'C'])
    >>> L2=(['T', 'C'], ['T', 'C'], ['T', 'C'])
    >>>
    >>> import itertools
    >>>
    >>> [''.join(xs) for xs in itertools.product(*L1)]
    ['GTT', 'GTC', 'GCT', 'GCC', 'CTT', 'CTC', 'CCT', 'CCC', 'ATT', 'ATC', 'ACT', 'ACC']
    >>> [''.join(xs) for xs in itertools.product(*L2)]
    ['TTT', 'TTC', 'TCT', 'TCC', 'CTT', 'CTC', 'CCT', 'CCC']
    

    【讨论】:

      猜你喜欢
      • 2023-01-09
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      相关资源
      最近更新 更多