首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较两个不同长度的列表并根据计数映射项目

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

Stack Overflow用户
提问于 2019-07-16 17:54:13
回答 2查看 124关注 0票数 0

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

代码语言:javascript
复制
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

预期结果:

代码语言:javascript
复制
---------------##EEEESS

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

但我得到了以下结果:

代码语言:javascript
复制
 - 0 #
 - 1 #
 - 2 #
 - 3 #
 - 4 #
 - 5 #
 - 6 #
 - 7 #
EN

回答 2

Stack Overflow用户

发布于 2019-07-16 20:09:30

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

代码语言:javascript
复制
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])

打印:

代码语言:javascript
复制
---------------##EEEESS
---------------RRCAVVTG
票数 0
EN

Stack Overflow用户

发布于 2019-07-17 17:45:05

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57054593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档