【问题标题】:Python loops iteration to get a list of all indices of an element in a listPython循环迭代以获取列表中元素的所有索引的列表
【发布时间】:2014-05-02 14:46:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: python string loops for-loop indices


【解决方案1】:

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

另外,请务必将a = [] 放在 for-loop 之前。否则,您实际上是在每次循环迭代时重置列表。

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]

【讨论】:

  • 这意味着它应该与for或define对齐?
  • @user3457606 它应该与for处于相同的缩进级别。
  • 我确实意识到它可以通过列表理解来解决,但我特别需要一个循环解决方案。
  • @user3457606 当然,我的答案的开头仍然有效。另外,理解可能对其他访问此页面时遇到相同问题的人有所帮助。
  • 是的。有没有一种方法我们可以单独使用循环来做到这一点?
【解决方案2】:

您可以使用快速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

【讨论】:

    【解决方案3】:

    您在 for 循环迭代的第一个循环中返回 a。

    将 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
    

    【讨论】:

    • 这只会给出一个相同索引的字符的列表,它在列表中出现的次数。另外,有没有办法在远离 enumerate() 或列表理解、严格循环的情况下获得答案?
    • 对不起,也许我误解了这个问题,你能提供一个你想要的函数的输入和输出的例子吗?这样会更容易。
    • 所以如果我有 list_of_indices("abcc","c") => [2,3]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 2012-06-25
    • 2012-06-21
    • 1970-01-01
    相关资源
    最近更新 更多