我有一个字符串列表,如下
['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的新手,有人能给我推荐一个脚本吗?提前谢谢。原始列表很大。我已经给出了一个简短的版本。
发布于 2019-11-24 04:20:58
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+1和i+2是整数..
发布于 2019-11-24 04:23:35
您可以使用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发布于 2019-11-24 04:26:16
您可以通过压缩列表的移动版本来完成此操作:
total = sum(int(c) - int(b) for a, b, c in zip(lst, lst[1:], lst[2:]) if a == "UTR5")https://stackoverflow.com/questions/59011824
复制相似问题