2014-03-25 119 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

相关问题