【发布时间】:2022-11-27 00:01:24
【问题描述】:
我有一个包含不同数量元素的列表的变量:
['20', 'M', '10', 'M', '1', 'D', '14', 'M', '106', 'M']
['124', 'M', '19', 'M', '7', 'M']
['19', 'M', '131', 'M']
['3', 'M', '19', 'M', '128', 'M']
['12', 'M', '138', 'M']
变量始终是数字、字母和顺序。
我只想将连续 M 的值相加(即,如果有 D,则跳过总和):
['30', 'M', '1', 'D', '120', 'M']
['510', 'M']
['150', 'M']
['150', 'M']
['150', 'M']
附言。完整的故事是我想转换软剪辑以匹配 bam 文件,但卡在了那一步。
#!/usr/bin/python
import sys
import pysam
bamFile = sys.argv[1];
bam = pysam.AlignmentFile(bamFile, 'rb')
for read in bam:
cigar=read.cigarstring
sepa = re.findall('(\d+|[A-Za-z]+)', cigar)
for i in range(len(sepa)):
if sepa[i] == 'S':
sepa[i] = 'M'
【问题讨论】:
-
你不需要正则表达式。您应该首先将列表转换为
[('20', 'M',) ('10', 'M'), ('1', 'D'), ('14', 'M'), ('106', 'M')],然后查看itertools.groupby,以根据元组的第二个元素对连续运行的元组进行分组。 -
@chepner:或者,只在切片中使用步长值。