我有一个以数字开头的字符串(从0到9) 我知道我可以使用startswith()进行“或”10个测试用例,但可能有一个更简洁的解决方案
所以不要写
if (string.startswith('0') || string.startswith('2') ||
string.startswith('3') || string.startswith('4') ||
string.startswith('5') || string.startswith('6') ||
string.startswith('7') || string.startswith('8') ||
string.startswith('9')):
#do something
是否有更聪明/更有效的方式?
答案 0 :(得分:124)
Python的string
库有isdigit()
方法:
string[0].isdigit()
答案 1 :(得分:24)
>>> string = '1abc'
>>> string[0].isdigit()
True
答案 2 :(得分:6)
您的代码不起作用;您需要or
而不是||
。
尝试
'0' <= strg[:1] <= '9'
或
strg[:1] in '0123456789'
或者,如果你真的对startswith
感到疯狂,
strg.startswith(('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'))
答案 3 :(得分:5)
有时候,你可以使用正则表达式
>>> import re
>>> re.search('^\s*[0-9]',"0abc")
<_sre.SRE_Match object at 0xb7722fa8>
答案 4 :(得分:3)
for s in ("fukushima", "123 is a number", ""):
print s.ljust(20), s[0].isdigit() if s else False
结果
fukushima False
123 is a number True
False
答案 5 :(得分:2)
您还可以使用try...except
:
try:
int(string[0])
# do your stuff
except:
pass # or do your stuff
答案 6 :(得分:1)
以下是我的“答案”(在这里尝试独特,我实际上并不建议这个特殊情况: - )
使用 ord()和特殊a <= b <= c
表单:
//starts_with_digit = ord('0') <= ord(mystring[0]) <= ord('9')
//I was thinking too much in C. Strings are perfectly comparable.
starts_with_digit = '0' <= mystring[0] <= '9'
(此a <= b <= c
与a < b < c
一样,是一种特殊的Python构造,它有点简洁:比较1 < 2 < 3
(true)和1 < 3 < 2
(false)和{{ 1}}(真)。这不是大多数其他语言的工作方式。)
(1 < 3) < 2
答案 7 :(得分:1)
令人惊讶的是,经过这么长时间,仍然缺少最佳答案。
其他答案的缺点是使用.small-container {
width: 150px;
height: 50px;
background-color: red;
margin-left: 200px;
}
选择第一个字符,但是如前所述,这会在空字符串上中断。
使用以下内容可以避免此问题,并且在我看来,它提供了我们所拥有选项中最漂亮,最易读的语法。它也不会使用正则表达式导入/填充):
[0]
答案 8 :(得分:0)
您可以使用regular expressions。
您可以使用以下方法检测数字:
if(re.search([0-9], yourstring[:1])):
#do something
[0-9] par匹配任何数字,yourstring [:1]匹配字符串的第一个字符
答案 9 :(得分:-2)
如果要以某种方式扩展方法的功能,请使用Regular Expressions。
答案 10 :(得分:-5)
试试这个:
if string[0] in range(10):