Kyr*_*bas 0 python list-comprehension
我需要从另一个预定义列表构建所有可能排列的列表.我希望使用列表推导,但我愿意接受其他建议.
我遇到的问题是列表元素的输出可以是任何用户定义的长度正整数,我还没有遇到任何指向我如何自动化的方法(如果可能的话) .
bases = ['A', 'C', 'G', 'T']
Run Code Online (Sandbox Code Playgroud)
所以,如果我想要3的输出,我需要
[x+y+z for x in bases for y in bases for z in bases]
Run Code Online (Sandbox Code Playgroud)
我需要输出4
[w+x+y+z for w in bases for x in bases for y in bases for z in bases]
Run Code Online (Sandbox Code Playgroud)
import itertools
print(list(itertools.permutations(bases)))
# => [('A', 'C', 'G', 'T'), ('A', 'C', 'T', 'G'), ('A', 'G', 'C', 'T'), ('A', 'G', 'T', 'C'), ('A', 'T', 'C', 'G'), ('A', 'T', 'G', 'C'), ('C', 'A', 'G', 'T'), ('C', 'A', 'T', 'G'), ('C', 'G', 'A', 'T'), ('C', 'G', 'T', 'A'), ('C', 'T', 'A', 'G'), ('C', 'T', 'G', 'A'), ('G', 'A', 'C', 'T'), ('G', 'A', 'T', 'C'), ('G', 'C', 'A', 'T'), ('G', 'C', 'T', 'A'), ('G', 'T', 'A', 'C'), ('G', 'T', 'C', 'A'), ('T', 'A', 'C', 'G'), ('T', 'A', 'G', 'C'), ('T', 'C', 'A', 'G'), ('T', 'C', 'G', 'A'), ('T', 'G', 'A', 'C'), ('T', 'G', 'C', 'A')]
Run Code Online (Sandbox Code Playgroud)
理解是工作的坏工具(至少是自己),因为你需要递归(或者至少是递归变平)才能正确地处理可变长度列表.
编辑:现在,你的文字说"排列",这是元素不重复,只是洗牌.您的代码表明您可能正在考虑笛卡尔积,其中每个位置都是从集合中独立选择的; 在这种情况下你想要itertools.product:
import itertools
print(list(itertools.product(bases, repeat=3)))
# => [('A', 'A', 'A'), ('A', 'A', 'C'), ('A', 'A', 'G'), ('A', 'A', 'T'), ('A', 'C', 'A'), ('A', 'C', 'C'), ('A', 'C', 'G'), ('A', 'C', 'T'), ('A', 'G', 'A'), ('A', 'G', 'C'), ('A', 'G', 'G'), ('A', 'G', 'T'), ('A', 'T', 'A'), ('A', 'T', 'C'), ('A', 'T', 'G'), ('A', 'T', 'T'), ('C', 'A', 'A'), ('C', 'A', 'C'), ('C', 'A', 'G'), ('C', 'A', 'T'), ('C', 'C', 'A'), ('C', 'C', 'C'), ('C', 'C', 'G'), ('C', 'C', 'T'), ('C', 'G', 'A'), ('C', 'G', 'C'), ('C', 'G', 'G'), ('C', 'G', 'T'), ('C', 'T', 'A'), ('C', 'T', 'C'), ('C', 'T', 'G'), ('C', 'T', 'T'), ('G', 'A', 'A'), ('G', 'A', 'C'), ('G', 'A', 'G'), ('G', 'A', 'T'), ('G', 'C', 'A'), ('G', 'C', 'C'), ('G', 'C', 'G'), ('G', 'C', 'T'), ('G', 'G', 'A'), ('G', 'G', 'C'), ('G', 'G', 'G'), ('G', 'G', 'T'), ('G', 'T', 'A'), ('G', 'T', 'C'), ('G', 'T', 'G'), ('G', 'T', 'T'), ('T', 'A', 'A'), ('T', 'A', 'C'), ('T', 'A', 'G'), ('T', 'A', 'T'), ('T', 'C', 'A'), ('T', 'C', 'C'), ('T', 'C', 'G'), ('T', 'C', 'T'), ('T', 'G', 'A'), ('T', 'G', 'C'), ('T', 'G', 'G'), ('T', 'G', 'T'), ('T', 'T', 'A'), ('T', 'T', 'C'), ('T', 'T', 'G'), ('T', 'T', 'T')]
Run Code Online (Sandbox Code Playgroud)