我想计算一个字符串中前导空格的数量。这是最恐怖的方式吗?
>>>F(' ' * 5 + 'a')
5
(更新)以下是几个答案的时间安排:
import timeit
>>> timeit.timeit("s.index(re.search(r'\S',s).group())", number=10000, setup="import re;s=' a'")
0.027384042739868164
>>> timeit.timeit("len([i for i in itertools.takewhile(str.isspace,s)])", number=10000, setup="import itertools;s=' a'")
0.025166034698486328
>>> timeit.timeit("next(idx for idx,val in enumerate(s) if val != ' ')", number=10000, setup="s=' a'")
0.028306961059570312
>>> timeit.timeit("F(' a')", number=10000, setup="def F(s): return len(s)-len(s.lstrip(' '))")
0.0051808357238769531
答案 0 :(得分:7)
>>> s
' a'
>>> import re
>>> s.index(re.search(r'\S',s).group())
5
>>> import itertools
>>> len([i for i in itertools.takewhile(str.isspace,s)])
5
蛮力方式
>>> def F(s):
... for i in s:
... if i!=' ':
... return s.index(i)
...
>>> F(s)
5
答案 1 :(得分:4)
>>> F = lambda x:len(x)-len(x.lstrip(' '))
>>> F(' ' * 5 + 'a')
5
如果您需要查找前导空格的长度,则可以删除' '来自lstrip,现在仅限于空格
答案 2 :(得分:3)
使用enumerate
遍历字符串s
。只要您点击' '
中的非s
项目,就打印该索引,这就是您要查找的内容。
>>> for i, val in enumerate(s):
... if val != ' ':
... print i
... break
...
5
答案 3 :(得分:2)
def f(string):
try:
return [c == ' ' for c in string].index(False)
except ValueError:
return -1
查找与' '
答案 4 :(得分:1)
通过re
模块。并使用len
函数。
>>> s = ' a'
>>> len(re.sub(r'\S.*', '',s))
5
这将从第一个非空格字符中删除所有字符到最后一个字符。然后len函数应用于结果字符串,为您提供前导空格的长度。
或强>
>>> s = ' a'
>>> len(re.match(r'\s*', s).group())
5
>>> s = 'a'
>>> len(re.match(r'\s*', s).group())
0
这将只匹配零个或多个前导空格。
或强>
使用re.match函数的end()
属性。
>>> s = ' a'
>>> re.match(r'\s*', s).end()
5
>>> re.match(r'\s*', 'd').end()
0
答案 5 :(得分:1)
哦,还有一个人还没有发布。
def leading_spaces(s):
return next(idx for idx,val in enumerate(s) if val != " ")
这几乎可以肯定是最快的方法
答案 6 :(得分:0)
一张简单的地图然后总结:
>>> sum(map(bool, takewhile(str.isspace, ' a ')))
4
答案 7 :(得分:0)
代码:
>>> i = 0
>>> while i < len(s):
... if s[i] != ' ':
... print i
... break
... i += 1
5
答案 8 :(得分:0)
使用第一个字符删除左侧的字符串:
>>> s = 'aaaaabaca'
>>> len(s) - len(s.lstrip(s[0]))
5
如果你想使它适用于空字符串,只需添加一个支票:
>>> s = ''
>>> len(s) - len(s.lstrip(s[0])) if s else 0
0
答案 9 :(得分:-2)
抱歉没有足够明确....初始化一个计数器...你只是遍历字符串并设置一个条件来检查列表中的每个变量是否为空格,计数器增加1 ...
counter = 0
sstring = " " * 5 + "a"
for x in sstring:
if x == " ":
counter += 1
else:
continue
print(counter)
我真诚地抱歉,我不知道为什么我的剧本一直以这种糟糕的形式出现......我是新来的