gpt4 book ai didi

Python3 : List of strings, 其中字符串具有可变字母(不是所有位置的所有字母)

转载 作者:行者123 更新时间:2023-11-28 18:17:54 24 4
gpt4 key购买 nike

首先介绍一些生物学背景,以便您理解我的问题。在生物学中,DNA 序列可以包含可被 enzyme 或蛋白质识别的基序。这些图案是字符串,如“GACTGC”。分析可以揭示主题中的位置是否“保守”。

enzyme 可能最能识别“GACTGC”,但也可能识别“CACTGC”甚至“TTCTGC”。因此,某些位置可能会有所不同。

我有以下情况:我想创建一个可以识别的带有图案的排列列表。为此,我有以下信息:

最佳认可:GACTGC

基地,也可能:

GACTGC
A C G
T A

这意味着,在第一个位置,也可能有 A 或 T,在第 4 个位置可能有一个 C 等,但在第 2 个位置,A 是守恒的,没有其他可能。

我可以生成一个列表,每个位置都有一个碱基,方法是将“最适合”主题转换为字母列表并替换一个字母,加入并附加到我的列表(对每个位置都这样做)。所以它基本上是硬编码的。它成功了,因为我改变了任何位置,无论输入什么主题。 但现在我想根据主题将特定位置更改为特定字母并仅存储特定排列。

因此,我正在寻找最短/最快/也许是最聪明的方法来传递位置及其有效字母的信息,以及如何为一个和两个可变位置创建排列。

请注意:我会尝试在答案中或通过编辑发布我的代码,以某种方式复制粘贴然后在标记的代码上按 ctrl+k 不起作用

最佳答案

可能有一种方法可以使用 itertools 解决这个问题,但我认为可以使用自制的置换函数足够快地完成:

example_bases = [
"GAT", # options for first position
"A", # options for second position
"C", # ...
"TC",
"G",
"CGA"
]

def permutate(bases, results, depth=0, current_result=""):
"""Create permutations of a list of strings

All resulting strings have the length len(bases), and there will be a total
of mult([len(options) for option in bases]) total results, e.g.:
["abc", "de", "fghi"] -> 3 * 2 * 4 -> 24

:param bases: List of possible options for a base
:param results: The object which will contain all valid results
:param depth: Internal counter for current recursive depth
:param current_result: Internal variable to keep track of progress
"""
if depth == len(bases):
results.append(current_result)
else:
for base in bases[depth]:
permutate(bases, results, depth+1, current_result+base)

example_results = []
permutate(example_bases, example_results)
for sequence in example_results:
print(sequence)

打印此特定示例的 18 种可能组合:

GACTGC
GACTGG
GACTGA
GACCGC
GACCGG
GACCGA
AACTGC
AACTGG
AACTGA
AACCGC
AACCGG
AACCGA
TACTGC
TACTGG
TACTGA
TACCGC
TACCGG
TACCGA

如果您不喜欢递归或者您对代码有疑问,请随时提问。

关于Python3 : List of strings, 其中字符串具有可变字母(不是所有位置的所有字母),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47198703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com