如何相对于另一个字符串减去连续的字符串?
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+1
和 i+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")
我有一个字符串列表如下
['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+1
和 i+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")