2013-07-14 3 views
0

저는 Python을 처음 접했지만 Google이 아직 해결하지 못한 문제가 있습니다. 문자열 목록 (f_list)이 있습니다. 특정 문자 ('>')가 포함 된 문자열의 색인 표시 목록을 생성하고 싶습니다.목록에서 특정 문자가 포함 된 문자열 색인 찾기

예 : f_list = '> EntryA'EntryB '> EntryC'는 EntryD]

I은 ​​생성하고자 : 가 index_list = [0, 2]

이 코드는 작동 하지만 Value의 정확한 이름 (예 : EntryA)을 입력해야합니다. 아래에 표시된 코드 예와 같이 '>'을 입력하면 index_list에 값을 반환하지 않습니다. 함수에서

>>> f_list = ['>EntryA', 'EntryB', '>EntryC', 'EntryD'] 
>>> for i, j in enumerate(f_list): 
...  if '>' in j: 
...   print i 
... 
0 
2 

:

f_list = ['>EntryA', 'EntryB', '>EntryC', 'EntryD'] 
    index_list = [] 

    def all_indices(v, qlist): 
     idx = -1 
     while True: 
      try: 
       idx = qlist.find(v, idx+1) 
       index_list.append(idx) 
      except ValueError: 
       break 
     return index_list 

    all_indices('>', f_list) 
    print(index_list) 

답변

3
>>> [i for i, s in enumerate(f_list) if '>' in s] 
[0, 2] 
0

혹시 인덱스로 작업하는 경우는, enumerate()는 기능입니다

>>> def all_indices(v, qlist): 
...  return [i for i, j in enumerate(f_list) if '>' in j] 
... 
>>> all_indices('>', f_list) 
[0, 2] 
+0

감사합니다. 이것은 제가하고있는 것보다 정확히 필요한 것입니다. –

+0

@KimDelaney 여러분을 환영합니다! 답변을 수락하는 것을 잊지 마십시오! – TerryA

1

당신은 문자열 찾기 위해 필터를 사용할 수 있습니다 :

>>> f_list = ['>EntryA', 'EntryB', '>EntryC', 'EntryD'] 
>>> filter(lambda s: '>' in s, f_list) 
['>EntryA', '>EntryC'] 

>>> [i for i, s in enumerate(f_list) if '>' in s] 
[0, 2] 

또는 당신은 둘 중 하나에 찾을 수 있습니다 : 지능형리스트는 인덱스를 찾기 위해 도움을

>>> filter(lambda s: '>' in s[1], enumerate(f_list)) 
[(0, '>EntryA'), (2, '>EntryC')] 

>>> [(i, s) for i, s in enumerate(f_list) if '>' in s] 
[(0, '>EntryA'), (2, '>EntryC')] 
관련 문제