2013-07-14 119 views
0

我對Python非常陌生,但我遇到了Google尚未解決的問題。我有一個字符串列表(f_list)。我想生成一個包含特定字符('>')的字符串的列表。查找包含特定字符的列表中的字符串索引

示例: f_list = [ '> EntryA',EntryB, '> EntryC',EntryD]

我想生成: 起始-TC = [0,2]

此代碼的工作,但我必須爲Value輸入字符串的確切名稱(即> EntryA)。如果我輸入'>'(如代碼示例中所示),它將不返回index_list中的值。

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()是你的函數:

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

在功能:

>>> 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')] 
相關問題