如何计算任意两个字母字符之间的破折号数量



如果我们有一个由字母字符和一些短划线组成的字符串,并且我们想计算该字符串中任意两个字母字符之间的短划线数量。做这件事最简单的方法是什么?

示例:

输入:a--bc---d-k

输出:2031

这意味着a和b之间有2个短划线,b和c之间有0个短划线、c和d之间有3个短划线以及d和k之间有1个短划线

在python中找到这个输出列表的好方法是什么?

您可以使用这样一个非常简单的解决方案:

import re
s = 'a--bc---d-k'
# Create a list of dash strings.
dashes = re.split('[a-z]', s)[1:-1]
# Measure the length of each dash string in the list and join as a string.
results = ''.join([str(len(i)) for i in dashes])

输出:

2031'

使用正则表达式的解决方案:

import re
x = 'a--bc---d-k'
results = [
len(m) for m in
re.findall('(?<=[a-z])-*(?=[a-z])', x)
]
print(results)
print(''.join(str(r) for r in results))

输出:

[2, 0, 3, 1]
2031

具有强力循环逻辑的解决方案:

x = 'a--bc---d-k'
count = 0
results = []
for c in x:
if c == '-':
count += 1
else:
results.append(count)
count = 0
results = results[1:]  # cut off first length
print(results)

输出:

[2, 0, 3, 1]

如果您的输入也可能以破折号开头,您可以使用以下内容:

def count_dashes(string):
all_counts = []
dash_count = 0
for char in string:
if char == "-":
dash_count += 1
else:
all_counts.append(dash_count)
dash_count = 0
return all_counts

但是,如果您的输入总是以字母开头,那么您可能不喜欢总是位于列表顶部的0。

如果您需要作为int字符串的输出,那么您可以添加以下内容:

def count_dashes(string):
all_counts = []
dash_count = 0
for char in string:
if char == "-":
dash_count += 1
else:
all_counts.append(dash_count)
dash_count = 0
return "".join([str(number) for number in all_counts])

这里有一个简单的循环方法:

myinput = 'a--bc---d-k'
output = []
output_count = -1
for elem in myinput:
if elem == '-':
output[output_count] = output[output_count]+1
else:
output.append(0)
output_count += 1
print(output)

最新更新