일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 데이터구조
- 데이터베이스
- 2
- 컴퓨터비전
- 웹개발
- 인공지능
- 네트워크보안
- Yes
- 딥러닝
- 컴퓨터공학
- I'm Sorry
- 컴퓨터과학
- 클라우드컴퓨팅
- 코딩
- 빅데이터
- 파이썬
- 소프트웨어
- 데이터과학
- 보안
- 데이터분석
- 머신러닝
- 자료구조
- 알고리즘
- 네트워크
- 프로그래밍언어
- 사이버보안
- 소프트웨어공학
- 버전관리
- 자바스크립트
- 프로그래밍
- Today
- Total
스택큐힙리스트
파이썬에서 문자열이 반복되는지 어떻게 알 수 있나요? 본문
주어진 문자열이 전체 문자열에 대해 자신을 반복하는지 여부를 테스트하기 위한 방법을 찾고 있습니다.
1. Hello - 안녕하세요
2. How are you? - 어떻게 지내세요?
3. Goodbye - 안녕히 가세요
4. Thank you - 감사합니다
5. I love you - 사랑해요
6. What time is it? - 지금 몇 시예요?
7. Where is the restroom? - 화장실이 어디에 있나요?
8. How much does it cost? - 얼마에요?
9. Can I have the menu, please? - 메뉴판 좀 가져다 주시겠어요?
10. Excuse me - 실례합니다.
[
'0045662100456621004566210045662100456621', # '00456621'
'0072992700729927007299270072992700729927', # '00729927'
'001443001443001443001443001443001443001443', # '001443'
'037037037037037037037037037037037037037037037', # '037'
'047619047619047619047619047619047619047619', # '047619'
'002457002457002457002457002457002457002457', # '002457'
'001221001221001221001221001221001221001221', # '001221'
'001230012300123001230012300123001230012300123', # '00123'
'0013947001394700139470013947001394700139470013947', # '0013947'
'001001001001001001001001001001001001001001001001001', # '001'
'001406469760900140646976090014064697609', # '0014064697609'
]
자신을 반복하는 문자열이며,
[
'004608294930875576036866359447',
'00469483568075117370892018779342723',
'004739336492890995260663507109',
'001508295625942684766214177978883861236802413273',
'007518796992481203',
'0071942446043165467625899280575539568345323741',
'0434782608695652173913',
'0344827586206896551724137931',
'002481389578163771712158808933',
'002932551319648093841642228739',
'0035587188612099644128113879',
'003484320557491289198606271777',
'00115074798619102416570771',
]
그것 (들)은 그런 것의 예시가 아니다.
나에게 주어진 문자열의 반복 섹션은 꽤 길 수 있으며, 문자열 자체는 500 자 이상이 될 수 있으므로 각 문자를 반복하여 패턴을 만들고 패턴을 나머지 문자열과 비교하는 것은 아주 느립니다. 이를 수백 개의 문자열로 곱하고 직관적인 해결책이 없습니다.
나는 정규 표현식을 조금 살펴보았는데, 무엇을 찾고 있는지 또는 적어도 찾고자 하는 패턴의 길이를 알고 있을 때 유용해 보입니다. 안타깝게도, 나는 둘 다 모릅니다.
해당 문자열이 반복되는 것인지 확인하고, 반복되는 경우 가장 짧은 반복 부분 문자열이 무엇인지 파악하는 방법은 무엇인가요?
답변 1
여기 Python 루프에서 속도가 느린 정규 표현식을 피하고 간결한 해결책이 있습니다.
def principal_period(s):
i = (s+s).find(s, 1, -1)
return None if i == -1 else s[:i]
@davidism가 시작한 Community Wiki answer에서 벤치마크 결과를 확인하세요. 요약하면,
데이빗 장의 해결책은 대형 예제 세트에서 모두 최소 5배 이상 뛰어나며 명확한 승자입니다.
그 답변의 말이지, 내 말이 아니야.
이는 문자열이 자기 자신의 비자명회전과 동일할 때에만 주기적임을 기반으로합니다. Alexander Torhamo에게 Kudos를 보냅니다. 그는 우리가 (s+s)[1:-1] 에서 s 의 처음 출현 인덱스에서 원시 주기를 복원할 수 있고 파이썬의 start 및 end 인수가 선택적임을 알려주었습니다. string.find .
답변 2
파이썬에서 문자열이 반복되는지 어떻게 확인할 수 있을까요? 문자열이 반복되는지 여부를 확인하는 방법에 대해서 알아보겠습니다.우선, 파이썬에서 문자열을 다룰 때는 문자열이라는 자료형을 사용합니다. 이 자료형은 작은 따옴표(')나 큰 따옴표()로 감싸서 표현합니다. 이 문자열은 + 연산자를 이용하여 서로 결합할 수 있습니다.
문자열을 반복시키는 방법은 * 연산자를 이용하여 반복하고자 하는 횟수를 지정해줍니다. 예를 들어, abc 문자열을 3번 반복시키려면 abc * 3과 같이 작성하면 됩니다. 이 때, 문자열이 반복되는지 여부를 확인하기 위해서는 Python의 내장함수인 len()과 slice notation을 이용할 수 있습니다.
slice notation은 문자열, 리스트, 튜플 등과 같이 시퀀스 자료형을 다룰 때 사용됩니다. 이를 이용하여 문자열의 일부를 추출할 수 있습니다. 예를 들어, 문자열 s에서 첫번째 글자부터 세번째 글자까지 추출하려면 s[0:3]과 같이 작성합니다. 이 때, slice notation은 [시작 인덱스: 종료 인덱스]의 형태로 작성됩니다. 인덱스는 0부터 시작합니다.
따라서, 문자열이 반복되는지 여부를 확인하려면 문자열의 절반을 추출하여 다른 절반과 일치하는지를 확인하면 됩니다. 예를 들어, 문자열 s가 abcabc와 같이 반복되는 경우, s[:len(s)//2]와 s[len(s)//2:]의 값이 모두 abc가 됩니다. 이 때, // 연산자는 정수 나누기를 나타냅니다.
따라서, Python에서 문자열이 반복되는지 확인하려면 slice notation과 len() 함수를 이용하여 문자열의 일부를 추출하고, 추출한 문자열이 다른 문자열과 일치하는지를 확인하면 됩니다. 이를 이용하여 문자열 패턴을 쉽고 빠르게 찾을 수 있습니다.