【发布时间】:2020-03-27 15:10:39
【问题描述】:
我有一个序列列表列表,以及一个对应的名称列表列表。
testSequences = [
['aaaa', 'cccc'],
['tt', 'gg'],
['AAAAAAA', 'CCCCCC', 'TTTTTT', 'GGGGGG']]
testNames = [
['>xx_oneFish |xzx', '>xx_twoFish |zzx'],
['>xx_redFish |zxx', '>xx_blueFish |zxx'],
['>xx_oneFish |xzx', '>xx_twoFish |xzx', '>xz_redFish |xxx', '>zx_blueFish |xzz']]
我还列出了姓名的所有识别部分:
taxonNames = ['oneFish', 'twoFish', 'redFish', 'blueFish']
我正在尝试生成一个新列表,其中列表中的每个项目都将对应于“名称的标识部分”之一,并且该字符串将由该名称的所有序列组成。
如果名称和序列未出现在列表中的一个列表中(即testNames 的第一个列表中没有redFish 或blueFish)我想添加一串相同长度的连字符作为该列表中的序列。这会给我这个输出:
['aaaa--AAAAAA', 'cccc--CCCCCC', '----ttTTTTTT', '----ggGGGG']
我有这段代码可以做到这一点。
complete = [''] * len(taxonNames)
for i in range(len(testSequences)):
for j in range(len(taxonNames)):
sequenceLength = len(testSequences[i][0])
for k in range(len(testSequences[i])):
if taxonNames[j] in testNames[i][k]:
complete[j].join(testSequences[i][k])
if taxonNames[j] not in testNames[i][k]:
hyphenString = "-" * sequenceLength
complete[j].join(hyphenString)
print complete
“完成”应该给出我上面解释的最终输出,但它看起来像这样:
['', '', '', '']
如何修复我的代码以给出正确答案?
【问题讨论】:
-
表达式
complete[j].join(testSequences[i][k])返回一个新字符串。您对该字符串不执行任何操作,它会立即被丢弃。 Python 字符串是不可变的。这不会影响complete[j]内的str对象 -
@juanpa.arrivillaga 我怎样才能修改我的代码,让它给我正确的答案?
-
你需要修改列表,所以
complete[j] = complete[j].join(testSequences[i][k]) -
@juanpa.arrivillaga 从第 9 行及以下删除
if not语句,并将第 8 行从complete[j].join(testSequences[i][k])更改为complete[j] = complete[j].join(testSequences[i][k])给我这个:['AaaaaAaaaaAaaaaAaaaaAaaaaAaaaaA', 'CccccCccccCccccCccccCccccC', 'TttTttTttTttTttT', 'GggGggGggGggGggG'] -
为什么
'aaaa--AAAAAA'有两个连字符,'----ttTTTTTT'有四个连字符?