[python] 파이썬에서 캐릭터의 위치를 ​​얻는 방법?

파이썬에서 문자열 내부의 문자 위치를 어떻게 얻을 수 있습니까?



답변

이이 두 개의 문자열 방법은, find()하고 index(). 이 둘의 차이점은 검색 문자열을 찾을 수 없을 때 발생하는 것입니다. find()반환 -1index()인상 ValueError.

사용 find()

>>> myString = 'Position of a character'
>>> myString.find('s')
2
>>> myString.find('x')
-1

사용 index()

>>> myString = 'Position of a character'
>>> myString.index('s')
2
>>> myString.index('x')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

로부터 파이썬 설명서

string.find(s, sub[, start[, end]])
가장 낮은 인덱스를 반환 문자열 서브 되도록 발견 서브 전부에 포함된다 s[start:end]. -1실패시 반환 . 음수 값의 시작 및 해석에 대한 기본값은 슬라이스와 동일합니다.

과:

string.index(s, sub[, start[, end]])
부분 문자열을 찾을 수 없을 때
처럼 find()올리십시오 ValueError.


답변

완전성을 위해 문자열에서 문자의 모든 위치를 찾아야 할 경우 다음을 수행 할 수 있습니다.

s = 'shak#spea#e'
c = '#'
print [pos for pos, char in enumerate(s) if char == c]

이것은 돌아올 것이다 [4, 9]


답변

>>> s="mystring"
>>> s.index("r")
4
>>> s.find("r")
4

“긴 바람”방법

>>> for i,c in enumerate(s):
...   if "r"==c: print i
...
4

부분 문자열을 얻으려면

>>> s="mystring"
>>> s[4:10]
'ring'


답변

완료를 위해 파일 이름에서 확장자를 확인하여 확인하려면 마지막 ‘.’을 찾아야합니다.이 경우 rfind를 사용하십시오.

path = 'toto.titi.tata..xls'
path.find('.')
4
path.rfind('.')
15

필자의 경우 다음을 사용하여 전체 파일 이름이 무엇이든 작동합니다.

filename_without_extension = complete_name[:complete_name.rfind('.')]


답변

문자열에 중복 문자가 포함되면 어떻게됩니까? 내가 경험 한 index()바에 따르면 중복으로 인해 동일한 색인을 얻는다는 것을 알았습니다.

예를 들면 다음과 같습니다.

s = 'abccde'
for c in s:
    print('%s, %d' % (c, s.index(c)))

돌아올 것이다 :

a, 0
b, 1
c, 2
c, 2
d, 4

이 경우 다음과 같은 작업을 수행 할 수 있습니다.

for i, character in enumerate(my_string):
   # i is the position of the character in the string


답변

string.find(character)
string.index(character)  

아마도 두 문서 의 차이점이 무엇인지 찾기 위해 문서 를 살펴보고 싶을 것 입니다.


답변

문자열에 문자가 여러 번 나타날 수 있습니다. 예를 들어 문자열 sentence에서 위치는 e입니다 1, 4, 7(인덱싱은 일반적으로 0에서 시작하기 때문에) 하지만 내가 발견하면 기능을 모두입니다 find()index()문자의 첫 번째 위치를 반환합니다. 따라서이 작업을 수행하면 해결할 수 있습니다.

def charposition(string, char):
    pos = [] #list to store positions for each 'char' in 'string'
    for n in range(len(string)):
        if string[n] == char:
            pos.append(n)
    return pos

s = "sentence"
print(charposition(s, 'e'))

#Output: [1, 4, 7]