循环遍历字符串并生成所有字符串列表的最佳方法是什么?这些字符串与原始字符串之间的距离为某些字符,例如[ACGT]×X(小于字符串长度的整数)。你知道吗
例如,由2个字符变化的字符串'AGT'
:
"['AGCT']['AGCT']T", "A['AGCT']['AGCT']", "['AGCT']G['AGCT']"
现在我正在使用蛮力方法使用for循环来改变每个循环1个字符。基本上,我需要运行循环并创建一个新的列表,列出对字符串所做的更改的数量;例如,如果我想要2个更改,我需要运行循环2次,对于每个后续循环,我将使用上一个循环中的列表。你知道吗
sequences=['AGT','CGG']
l=[]
for sequence in sequences:
for i in range(len(sequence)):
l.append( sequence[:i]+ 'C' +sequence[i+1:])
l.append( sequence[:i]+ 'T' +sequence[i+1:])
l.append( sequence[:i]+ 'G' +sequence[i+1:])
l.append( sequence[:i]+ 'A' +sequence[i+1:])
new_lst=[]
for sequence in l:
for i in range(len(sequence)):
new_lst.append( sequence[:i]+ 'C' +sequence[i+1:])
new_lst.append( sequence[:i]+ 'T' +sequence[i+1:])
new_lst.append( sequence[:i]+ 'G' +sequence[i+1:])
new_lst.append( sequence[:i]+ 'A' +sequence[i+1:])
我假设你不关心字符的插入或删除,只关心替换。你知道吗
据我所知,没有有效的方法来做这件事。这是一个指数问题。但是
itertools
能帮上忙。你知道吗让
s
成为要改变的字符串(例如“AGT”)。设variance
为不同字符数(如2)。让alphabet
成为允许的字符列表(例如“ACGT”)。你知道吗首先,可以循环遍历所有可能随
itertools.combinations(range(len(s)), r=variance)
变化的索引组合。这会给你(0, 1)
,(0, 2)
,(1, 2)
,等等下一步,您需要找出所有可以放置在这些位置的替换字母集。可以循环遍历与
itertools.product(alphabet, repeat=variance)
不同的字母。这将为您提供从字母表生成的长度为variance
的元组。你知道吗您可能希望确保用新字母替换字符串中的字母(例如,您不希望用
'AG'
替换'AGT'
中的前两个字母)。所以,你可能想检查一下。你知道吗以下代码将上述内容放在一起:
潜在的改进:我很确定您可以使用不同的itertools方法来摆脱额外的检查步骤,以确保替换字母都实际更改了字符串。不管怎样,我希望这可以作为itertools方法的一个很好的演示,它可以在像这样的指数膨胀的情况下提供帮助。你知道吗
相关问题 更多 >
编程相关推荐