Python循环迭代以获取列表中元素的所有索引的列表

时间:2014-03-25 00:06:56

标签: python string loops for-loop indices

我正在尝试编写一个消耗字符串和字符的函数,并为该字符串中所有出现的字符生成一个索引列表。

到目前为止,这就是我所拥有的,但它总是给我[]。

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

我不明白为什么这不会产生答案。它必须是非空长度列表。

任何人都知道如何获取所有事件的索引?

3 个答案:

答案 0 :(得分:1)

您将在for - 循环的第一次迭代中返回。确保return语句不在循环范围内。

另外,请确保在<{em} { - 1}}循环之前放置a = [] 。否则,您将在每次循环迭代时有效地重置列表。

for也存在问题。这将始终返回char_list.index(x)第一个出现的索引,这不是您想要的。您应该在循环时跟踪索引(例如使用enumerate())。

而且我不确定你是怎么做的那种;循环遍历原始字符串就足够了。

最后,请注意,您可以直接循环字符串;您不需要将其转换为列表(即x是不必要的)。


请注意,您的任务可以通过简单的list comprehension

来完成
char_list

答案 1 :(得分: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

答案 2 :(得分: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