如何比较两个不同长度的列表并根据计数映射项目

时间:2019-07-16 09:54:12

标签: python-2.7

我有两个长度不同的列表,我想根据它们的实际关系来匹配它们。一个列表是二级结构元素,另一个列表是对齐序列。我想将二级结构与其其他列表中的残基进行匹配。并通过在对齐序列的间隙中插入“-”来调整二级结构的长度。 ss中的项目对应于seq中的RRCAVVTG。

ss=['-', '-', 'E', 'E', 'E', 'E', 'S', 'S']
seq≈["---------------RRCAVVTG"]
for m in seq:
        found=[i for i in list(m)]
sscount=0
sscount1=0
for  char,ssi in zip(found,ss): 

    if char!='-'  :
        print char , sscount, ssi
        sscount+=1

    else:
        print char, sscount1, '#'
        sscount1+=1

预期结果:

---------------##EEEESS

---------------RRCAVVTG

但是我得到以下结果:

 - 0 #
 - 1 #
 - 2 #
 - 3 #
 - 4 #
 - 5 #
 - 6 #
 - 7 #

2 个答案:

答案 0 :(得分:0)

我希望我理解正确的问题。首先我们用ss填充字符串-,然后使用seq将其与zip()中的字符串进行比较:

ss = ['-', '-', 'E', 'E', 'E', 'E', 'S', 'S']

seq = ["---------------RRCAVVTG"]

out = ''
for ch1, ch2 in zip('{:->{}}'.format(''.join(ss), len(seq[0])), seq[0]):
    if ch1=='-' and ch2 !='-':
        out += '#'
    elif ch1=='-' and ch2 == '-':
        out += '-'
    else:
        out += ch1

print(out)
print(seq[0])

打印:

---------------##EEEESS
---------------RRCAVVTG

答案 1 :(得分:0)

for m in seq:
    found=[i for i in list(m)]
sscount=0
sscount1=0
num=0
for  char,ssi in zip(found,itertools.cycle(ss)): 

    if char!='-'  :
        print char , sscount, ss[num]
        d.append(ss[num])
        num+=1
        sscount+=1

    else:
        print char, sscount1, '#'
        sscount1+=1