파이썬에서 문자열 내부의 문자 위치를 어떻게 얻을 수 있습니까?
파이썬에서 문자열 내부의 문자 위치를 어떻게 얻을 수 있습니까?
답변:
이이 두 개의 문자열 방법은, find()
하고 index()
. 이 둘의 차이점은 검색 문자열을 찾을 수 없을 때 발생하는 것입니다. find()
반환 -1
및 index()
인상 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]
print( [pos for pos, char in enumerate(s) if char == c])
foo = ( [pos for pos, char in enumerate(s) if char == c])
좌표 foo 를 목록 형식으로 넣습니다 . 나는 발견이 정말 도움이
>>> 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'
str[from:to]
위치 from
와 to
인덱스
완료를 위해 파일 이름에서 확장자를 확인하여 확인하려면 마지막 '.'을 찾아야합니다.이 경우 rfind를 사용하십시오.
path = 'toto.titi.tata..xls'
path.find('.')
4
path.rfind('.')
15
필자의 경우 다음을 사용하여 전체 파일 이름이 무엇이든 작동합니다.
filename_without_extension = complete_name[:complete_name.rfind('.')]
left = q.find("{"); right = q.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
enumerate
그런 종류의 것이 좋습니다.
문자열에 문자가 여러 번 나타날 수 있습니다. 예를 들어 문자열 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]
more_itertools.locate
조건을 만족하는 항목의 모든 지표를 찾는 타사 도구입니다.
여기서 우리 는 문자의 모든 색인 위치를 찾습니다 "i"
.
import more_itertools as mit
s = "supercalifragilisticexpialidocious"
list(mit.locate(s, lambda x: x == "i"))
# [8, 13, 15, 18, 23, 26, 30]
모든 인덱스에 빠르게 액세스 할 수있는 numpy 솔루션 :
string_array = np.array(list(my_string))
char_indexes = np.where(string_array == 'C')