如何相对于另一个字符串减去连续的字符串?

How to subtract consecutive strings with respect to another string?

我有一个字符串列表如下

['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']

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

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

我是 python 的新手,谁能给我推荐一个脚本。提前致谢。原始列表很大。我给了一个较短的版本。

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)

看看 enumerate 在迭代器上的 for 循环中的用法。

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

您可以使用 numpy.argwhere

轻松做到这一点
>>> 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

您可以通过压缩列表的移位版本来做到这一点:

total = sum(int(c) - int(b) for a, b, c in zip(lst, lst[1:], lst[2:]) if a == "UTR5")