Python - 为什么这个函数没有返回空格索引?

时间:2013-08-13 02:58:07

标签: python string whitespace

此代码将返回数字索引和非字母数字字符。但是,它只返回第一个空白区域的索引而不返回任何其他空格的索引,我不确定原因。

shoestring = "fwefw1234132 lkjaldskf98:[]['asd fads fadsf"

for n in shoestring:
    if n.isalpha():
        continue
    else:
        print n, shoestring.index(n)

2 个答案:

答案 0 :(得分:2)

字符串index()方法返回第一个匹配的索引。你问的是第一个匹配' '的子字符串,这就是它给出的东西。

答案 1 :(得分:2)

每次,您都在呼叫shoestring.index(n)n只是' '个字符。它无法知道你是想要第一个空格,还是第二个或第43个空间,所以它只会返回第一个空格。

正确的方法是跟踪索引,而不是搜索找到它。* enumerate函数使这很容易:

for i, n in enumerate(shoestring):
    if n.isalpha():
        continue
    else:
        print n, i

作为旁注,只需反转if即可让您的代码更简单,因此您不需要continue

for i, n in enumerate(shoestring):
    if not n.isalpha():
        print n, i

使用filter功能或理解,您可以获得更多乐趣:

nonalphas = ((n, i) for i, n in enumerate(shoestring) if not n.isalpha())
print '\n'.join('{} {}'.format(n, i) for n, i in nonalphas)

*即使您获得了正确的搜索,它也会使您的代码变慢。如果你有一个百万字符的所有空格字符串,每个搜索必须检查一百万个字符,你必须为每个空格执行一次,这意味着一万亿次比较。如果您只是跟踪索引,那么它只有一百万次比较。在技​​术方面,它是线性的而不是二次的。