首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将连续的字符串与另一个字符串相减?

如何将连续的字符串与另一个字符串相减?
EN

Stack Overflow用户
提问于 2019-11-24 04:13:16
回答 3查看 53关注 0票数 0

我有一个字符串列表,如下

代码语言:javascript
复制
['ENST00000641515.2', 'ENSG00000186092.6', 'OTTHUMG00000001094.4', 
'OTTHUMT00000003223.4', 'OR4F5', '202', 'OR4F5', '2618', 'UTR5', '1', '60', 
'CDS', '61', '1041', 'UTR3', '1042', '2618', '', 'ENST00000335137.4', 
'ENSG00000186092.6', 'OTTHUMG00000001094.4', '', '', 'OR4F5', '201', 'OR4F5',
 '1054', 'UTR5', '1', '36']

我想要遍历这个列表,如果string是'UTR5',我想从后面的两个连续的字符串中减去(前一个中的后一个)。减去的值应该相加,最后打印出答案。

示例:在第一个'UTR5‘之后是1和60。所以我想减去60 - 1,在第二个'UTR5‘中是36-1。最终答案应打印为94

我是python的新手,有人能给我推荐一个脚本吗?提前谢谢。原始列表很大。我已经给出了一个简短的版本。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-24 04:20:58

代码语言:javascript
复制
lst = ['ENST00000641515.2', 'ENSG00000186092.6', 'OTTHUMG00000001094.4',
       'OTTHUMT00000003223.4', 'OR4F5', '202', 'OR4F5', '2618', 'UTR5', '1', '60',
       'CDS', '61', '1041', 'UTR3', '1042', '2618', '', 'ENST00000335137.4',
       'ENSG00000186092.6', 'OTTHUMG00000001094.4', '', '', 'OR4F5', '201', 'OR4F5',
       '1054', 'UTR5', '1', '36']

total = 0
for i, x in enumerate(lst):
    if lst[i] == 'UTR5':
        total += (int(lst[i + 2]) - int(lst[i + 1]))

print(total)

看看迭代循环上的for循环中的enumerate使用。

请注意,假设索引i+1i+2是整数..

票数 1
EN

Stack Overflow用户

发布于 2019-11-24 04:23:35

您可以使用numpy.argwhere轻松实现这一点

代码语言:javascript
复制
>>> data = np.array(['ENST00000641515.2', 'ENSG00000186092.6', 'OTTHUMG00000001094.4',
       'OTTHUMT00000003223.4', 'OR4F5', '202', 'OR4F5', '2618', 'UTR5',
       '1', '60', 'CDS', '61', '1041', 'UTR3', '1042', '2618', '',
       'ENST00000335137.4', 'ENSG00000186092.6', 'OTTHUMG00000001094.4',
       '', '', 'OR4F5', '201', 'OR4F5', '1054', 'UTR5', '1', '36'])
>>> x = np.argwhere(data == "UTR5") + 1
>>> y = np.argwhere(data == "UTR5") + 2
>>> diff = data[y].astype(np.int) - data[x].astype(np.int)
>>> diff.sum()
94
票数 1
EN

Stack Overflow用户

发布于 2019-11-24 04:26:16

您可以通过压缩列表的移动版本来完成此操作:

代码语言:javascript
复制
total = sum(int(c) - int(b) for a, b, c in zip(lst, lst[1:], lst[2:]) if a == "UTR5")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59011824

复制
相关文章

相似问题

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