Как посчитать количество тире между любыми двумя алфавитными символами? - PullRequest
10 голосов
/ 18 марта 2020

Если у нас есть строка буквенных символов и несколько штрихов, и мы хотим подсчитать количество штрихов между любыми двумя алфавитными c символами в этой строке. Какой самый простой способ сделать это?

Пример:

Ввод: a--bc---d-k

вывод: 2031

Это означает, что есть 2 черты между a и b, 0 да sh между b и c, 3 черты между c и d и 1 да sh между d и k

, что является хорошим способом найти этот список вывода в python?

Ответы [ 4 ]

11 голосов
/ 18 марта 2020

Вы можете использовать очень простое решение, подобное этому:

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'

9 голосов
/ 18 марта 2020

Решение с регулярным выражением:

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

Решение с грубой силой l oop logi c:

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]
2 голосов
/ 18 марта 2020

Если ваш ввод также может начинаться с да sh, вы можете использовать это:

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, который всегда находится на заголовок списка.

Если вам нужен вывод в виде строки целых чисел, вы можете добавить это:

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])
1 голос
/ 18 марта 2020

Вот простой подход l oop:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...