두 알파벳 문자 사이의 대시 수를 계산하는 방법은 무엇입니까?


10

알파벳 문자와 대시가 있고이 문자열에서 두 알파벳 문자 사이의 대시 수를 계산하려는 경우. 가장 쉬운 방법은 무엇입니까?

예:

입력: a--bc---d-k

산출: 2031

이것은 a와 b 사이에 2 개의 대시, b와 c 사이에 0의 대시, c와 d 사이에 3 개의 대시, d와 k 사이에 1 개의 대시가 있음을 의미합니다.

파이썬 에서이 출력 목록을 찾는 좋은 방법은 무엇입니까?


3
간단히 for-loop로 시도해보십시오.
보성 최

1
@BoseongChoi 네, 확실히 루프를 시도했지만 혼란 스럽습니다. 더 자세히 설명해 주시겠습니까?
Not_Founded

@ Ch3steR 나는 우리에게 그런 입력이 없다고 생각했다.
Not_Founded

2
모두 지금 a-b-ca-----------b같은 출력이된다 11?
힙 오버플로

그것들은 대시가 아닌 하이픈입니다.
TRiG

답변:


9

정규식 솔루션 :

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]

f패턴 앞에 오타가 있다고 가정 합니까? 백 슬래시없이 원시 문자열을 만들 필요가 없습니다. 또한 캡처 그룹이 필요하지 않습니다 =). 좋은 답변
JvdV

1
@JvdV f감사합니다. f-string을 사용하고 있었지만 답변을 개선하는 동안 해당 부분을 삭제했지만 제거하는 것을 잊었습니다 f. 내 답변을 업데이트했습니다. 캡처 그룹도 필요 없음 :)
Boseong Choi

1
@ 팀 번호는 count단지에 추가됩니다 resultsc != '-'발생합니다. 로 x끝나는 경우 -last count가 무시됩니다.
보성 최

11

다음과 같이 매우 간단한 솔루션을 사용할 수 있습니다.

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'


2

입력이 대시로 시작될 수 있다면 다음을 사용할 수 있습니다.

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])

1

간단한 루프 접근 방식은 다음과 같습니다.

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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.