循环查找 space 和 python

Loop to find space with python

c = "ab cd ef gf"
n = []
for x in c:
    if x == " ":
        d = c.find(x)
        n.append(d)
print(n)

我希望这段代码能给我这样的东西。 [2,5,8] 但相反,它给了我这个。 [2,2,2]

请帮我找出错误。谢谢。

find() 会找到第一个实例,所以它总是在索引 2 处找到 space。您可以在使用 enumerate() 时跟踪索引,这样您就不会不需要 find():

c = "ab cd ef gf"
n = []
for i, x in enumerate(c):
    if x == " ":      
        n.append(i)
print(n)

或者作为列表理解:

[i for i, x in enumerate(c) if x == " "]

一种方法是:

space_idxs = []
for idx, char in enumerate(s):
    if char == ' ':
        space_idxs.append(idx)

那是因为 find(pattern) 函数 returns 模式的第一个条目。让我用所需的函数 find_all(string, pattern)

补充你的代码
def find_all(string, pattern):
    start = 0
    indexes = []
    for char in string:
        start = string.find(pattern, start)
        if start == -1: 
            return indexes
        indexes.append(start)
        start += len(pattern) 

c = "ab cd ef gf"
n = []
n = find_all(c, " ")
print(n)

尝试

c="ab cd ef gh"
x=" "
print([t for t, k in enumerate(c) if k==x])

它将 return [2,5,8]

在你的代码中,你在c中搜索x的索引值,三次:

  1. 在 for 循环中,您将字符串中的所有字符一一提取,
  2. if 循环验证它是否是 space
  3. 现在当字符是 space 时它进入 if 循环
  4. find 命令将在 c 中查找 x (space) 这是 2 重复三次并附加到 n

如果你想把它放在列表中:

n=([t for t, k in enumerate(c) if k==x])