我有一个清单:
>>> data
['abaaabababbbbaaabaab', 'baaabbbbabaabbaabaab']
我需要计算孤立b
的数量。 (本例中实际为9)。即如果该行中有一个b
(前一个或下一个字符不是b),则变量增加1。
答案 0 :(得分:2)
>>> import re
>>> data = ['abaaabababbbbaaabaab', 'baaabbbbabaabbaabaab']
>>> sum(1 for part in data for s in re.findall('[b]+', part) if len(s) == 1)
9
您可以编写一个更智能的正则表达式,它只匹配您想要的表达式。这样就可以省略if len(s) == 1
。
编辑。更聪明的正则表达式可能不值得,因为它更难理解:
>>> sum(len(re.findall('(?<!b)b(?!b)', part)) for part in data)
9
答案 1 :(得分:1)
尝试类似
的内容sum(len(c) == 1 for s in data for c in s.split('a')) # 9
仅当所有字符串由 a 和 b 组成时才有效,否则请使用re.split
:
import re
sum(len(c) == 1 for s in data for c in re.split(r'[^b]{1}', s)) # 9