4 回答

TA贡献1942条经验 获得超3个赞
如果您是说第一个非空白字符,那么我会使用类似这样的东西...
>>> a=' Hello world'
>>> len(a) - len(a.lstrip())
3
另一个有趣的地方:
>>> sum(1 for _ in itertools.takewhile(str.isspace,a))
3
但是我敢打赌,第一个版本会更快,因为它实际上只在C语言中执行此精确循环—当然,它需要在完成后构造一个新字符串,但这实际上是免费的。
为了完整起见,如果字符串为空或由完全空白组成,则这两个字符串都将返回len(a)(如果您尝试使用它进行索引,则将无效……)
>>> a = "foobar"
>>> a[len(a)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range

TA贡献1836条经验 获得超13个赞
使用regex:
>>> import re
>>> a=' Hello world'
>>> re.search(r'\S',a).start()
3
>>> a='\tHello world'
>>> re.search(r'\S',a).start()
1
>>>
处理字符串为空或仅包含空格的情况的函数:
>>> def func(strs):
... match = re.search(r'\S',strs)
... if match:
... return match.start()
... else:
... return 'No character found!'
...
>>> func('\t\tfoo')
2
>>> func(' foo')
3
>>> func(' ')
'No character found!'
>>> func('')
'No character found!'

TA贡献2019条经验 获得超9个赞
您也可以尝试:
a = ' Hello world'
a.index(a.lstrip()[0])
=> 3
只要字符串包含至少一个非空格字符,它就可以工作。我们可以更小心一点,并在进行以下检查:
a = ' '
-1 if not a or a.isspace() else a.index(a.lstrip()[0])
=> -1
添加回答
举报