2014-03-25 115 views
0

我正在嘗試編寫一個函數,它使用一個字符串和一個字符,併爲該字符串中該字符的所有出現產生一個索引列表。Python循環迭代獲取列表中元素的所有索引的列表

到目前爲止,這是我的,但它總是給我[]。

def list_of_indices(s,char): 

    string_lowercase = s.lower() 
    sorted_string = "".join(sorted(string_lowercase)) 
    char_list = list(sorted_string) 

    for x in char_list: 
      a = [] 
      if x == char: 

      a.append(char_list.index(x)) 
      return a 

我不明白爲什麼這不會產生答案。它必須是一個非空長度的列表。

任何人都知道如何獲得所有事件的指數?

+0

相關:[?如何找到一個元素出現的所有列表(http://stackoverflow.com/questions/6294179/how -to-find-all-occurrence-of-of-a-element-in-a-list) – kojiro

回答

1

您正在返回for -loop的第一次迭代。確保return聲明不在循環的範圍內。

此外,一定要把a = []之前for環回。否則,您將有效地重置循環的每次迭代中的列表。

char_list.index(x)也有問題。這將始終返回的第一個發生的索引x,這不是您想要的。您應循環跟蹤索引(例如,使用enumerate())。

我不確定你在做什麼,循環原始字符串應該足夠了。

最後,請注意,您可以直接在字符串上循環;您無需將其轉換爲列表(即不需要char_list)。


請注意,您的任務可以用一個簡單list comprehension來完成:

>>> s = 'abcaba' 
>>> char = 'a' 
>>> 
>>> [i for i,c in enumerate(s) if c == char] # <-- 
[0, 3, 5] 
+0

這意味着它應該與for對齊還是定義? – user3457606

+0

@ user3457606它應該與'for'具有相同的縮進級別。 – arshajii

+0

我意識到可以通過列表理解來解決問題,但我特別需要循環解決方案。 – user3457606

0

你可以使用快速list comprehension實現它。

def list_of_indicies(s, char): 
    return [i for i, c in enumerate(s) if c == char] 

,或者通過使用for循環,而不是:

def list_of_indicies(s, char): 
    results = list() 

    for i, c in enumerate(s): 
     if c == char: 
      results.append(i) 

    return results 
0

您對您的for循環迭代的第一個循環返回。

變更爲循環以此爲首發:

def list_of_indices(s,char): 
    string_lowercase = s.lower() 
    a = [] 
    i = 0 
    for x in string_lowercase: 
     if x == char: 
      a.append(i) 
     i+=1 
    return a 
+0

這隻給出了與列表中顯示的次數相同的字符索引列表。另外,有沒有辦法得到答案,而遠離枚舉()或列表理解,嚴格循環? – user3457606

+0

對不起,也許我錯誤理解了這個問題,你能提供一個你想要的功能的輸入和輸出的例子嗎?這將使它更容易。 – Aidan

+0

讓我們說如果我有list_of_indices(「abcc」,「c」)=> [2,3] – user3457606

相關問題