此代码将返回数字索引和非字母数字字符。但是,它只返回第一个空白区域的索引而不返回任何其他空格的索引,我不确定原因。
shoestring = "fwefw1234132 lkjaldskf98:[]['asd fads fadsf"
for n in shoestring:
if n.isalpha():
continue
else:
print n, shoestring.index(n)
答案 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)
*即使您获得了正确的搜索,它也会使您的代码变慢。如果你有一个百万字符的所有空格字符串,每个搜索必须检查一百万个字符,你必须为每个空格执行一次,这意味着一万亿次比较。如果您只是跟踪索引,那么它只有一百万次比较。在技术方面,它是线性的而不是二次的。