[PYTHON] 파이썬 - 문자열에서 문자를 찾으십시오 - 모든 색인을 가져올 수 있습니까?
PYTHON파이썬 - 문자열에서 문자를 찾으십시오 - 모든 색인을 가져올 수 있습니까?
나는 간단한 코드를 가지고있다 :
def find(str, ch):
for ltr in str:
if ltr == ch:
return str.index(ltr)
find("ooottat", "o")
이 함수는 첫 번째 인덱스 만 반환합니다. 인쇄물 반환을 변경하면 0 0 0이 인쇄됩니다. 이유가 무엇이며 0 1 2를 얻는 방법이 있습니까?
해결법
-
==============================
1.이는 str.index (ch)가 처음으로 ch가 발생한 인덱스를 반환하기 때문입니다. 시험:
이는 str.index (ch)가 처음으로 ch가 발생한 인덱스를 반환하기 때문입니다. 시험:
def find(s, ch): return [i for i, ltr in enumerate(s) if ltr == ch]
이렇게하면 필요한 모든 색인의 목록이 반환됩니다.
추신 Hugh의 대답은 생성자 함수를 보여줍니다 (인덱스 목록이 커질 수 있다면 차이가 있음). 이 기능은 []를 ()로 변경하여 조정할 수도 있습니다.
-
==============================
2.나는 Lev와 함께 할 것이지만, 더 복잡한 검색으로 끝나면 re.finditer를 사용하는 것이 가치가있을 수 있음을 지적 할 가치가 있습니다. (그러나 종종 re는 가치보다 더 많은 문제를 야기합니다 - 그러나 때때로 알기에는 편리합니다)
나는 Lev와 함께 할 것이지만, 더 복잡한 검색으로 끝나면 re.finditer를 사용하는 것이 가치가있을 수 있음을 지적 할 가치가 있습니다. (그러나 종종 re는 가치보다 더 많은 문제를 야기합니다 - 그러나 때때로 알기에는 편리합니다)
test = "ooottat" [ (i.start(), i.end()) for i in re.finditer('o', test)] # [(0, 1), (1, 2), (2, 3)] [ (i.start(), i.end()) for i in re.finditer('o+', test)] # [(0, 3)]
-
==============================
3.
def find_offsets(haystack, needle): """ Find the start of all (possibly-overlapping) instances of needle in haystack """ offs = -1 while True: offs = haystack.find(needle, offs+1) if offs == -1: break else: yield offs for offs in find_offsets("ooottat", "o"): print offs
~에 결과
0 1 2
-
==============================
4.Lev의 대답은 제가 사용하려고했던 것입니다. 그러나 여기에 원래 코드를 기반으로 한 것이 있습니다 :
Lev의 대답은 제가 사용하려고했던 것입니다. 그러나 여기에 원래 코드를 기반으로 한 것이 있습니다 :
def find(str, ch): for i, ltr in enumerate(str): if ltr == ch: yield i >>> list(find("ooottat", "o")) [0, 1, 2]
-
==============================
5.너는 이것을 시도 할 수 있었다.
너는 이것을 시도 할 수 있었다.
def find(ch,string1): for i in range(len(string1)): if ch == string1[i]: pos.append(i)
-
==============================
6.팬더를 사용하여 우리는 이것을 할 수 있고 모든 인덱스를 가진 dict을 반환 할 수 있습니다. 간단한 버전 :
팬더를 사용하여 우리는 이것을 할 수 있고 모든 인덱스를 가진 dict을 반환 할 수 있습니다. 간단한 버전 :
import pandas as pd d = (pd.Series(l) .reset_index() .groupby(0)['index'] .apply(list) .to_dict())
그러나 우리는 조건을 구축 할 수도 있습니다. 2 회 이상 발생하는 경우에만 :
d = (pd.Series(l) .reset_index() .groupby(0)['index'] .apply(lambda x: list(x) if len(list(x)) > 1 else None) .dropna() .to_dict())
-
==============================
7.
x = "abcdabcdabcd" print(x) l = -1 while True: l = x.find("a", l+1) if l == -1: break print(l)
from https://stackoverflow.com/questions/11122291/python-find-char-in-string-can-i-get-all-indexes by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Python PIP Install throws TypeError : - = : 'Retry'및 'int'에 대해 지원되지 않는 피연산자 유형이 있습니다. (0) | 2018.10.08 |
---|---|
[PYTHON] 한 줄에 한 문자 씩 인쇄하는 법? (0) | 2018.10.08 |
[PYTHON] NaN 값을 어떻게 확인할 수 있습니까? (0) | 2018.10.08 |
[PYTHON] datetime.isocalendar ()의 역함수를 찾는 가장 좋은 방법은 무엇입니까? (0) | 2018.10.08 |
[PYTHON] 파이썬 프라임 번호 검사기 [duplicate] (0) | 2018.10.08 |