在Python中生成动态列表推导

Joe*_*Joe 2 python list-comprehension

假设我有一个字母:

A = ['A', 'T', 'C', 'G']
Run Code Online (Sandbox Code Playgroud)

我想生成长度为n(n-mer)的所有可能组合.例如n=2: AA, AT, ..., GG.为了让事情变得有趣,我正在尝试以动态方式使用列表推导来生成这些内容.这在python中可能吗?唯一明显的路径是eval()动态使用并生成所需的字符串.但是,我很好奇,看看是否有一个不那么笨重的方法.

Jon*_*nts 6

每个可能的长度为2,将是 - (但你可能在之后permutations,combinationscombinations_with_replacementitertools......)

from itertools import product

A = ['A', 'T', 'C', 'G']
print list(product(A, repeat=2))

[('A', 'A'), ('A', 'T'), ('A', 'C'), ('A', 'G'), ('T', 'A'), ('T', 'T'), ('T', 'C'), ('T', 'G'), ('C', 'A'), ('C', 'T'), ('C', 'C'), ('C', 'G'), ('G', 'A'), ('G', 'T'), ('G', 'C'), ('G', 'G')]
Run Code Online (Sandbox Code Playgroud)

这相当于[(a,b) for a in A for b in A]但如果你想要3,4,千等等,更容易扩展......


mgi*_*son 5

>>> from itertools import combinations
>>> A = ['A', 'T', 'C', 'G']
>>> print list(combinations(A,2))
[('A', 'T'), ('A', 'C'), ('A', 'G'), ('T', 'C'), ('T', 'G'), ('C', 'G')]
Run Code Online (Sandbox Code Playgroud)

或者可能(以获得重复):

>>> from itertools import combinations_with_replacement
>>> print list(combinations_with_replacement(A,2))
[('A', 'A'), ('A', 'T'), ('A', 'C'), ('A', 'G'), ('T', 'T'), ('T', 'C'), ('T', 'G'), ('C', 'C'), ('C', 'G'), ('G', 'G')]
Run Code Online (Sandbox Code Playgroud)