本着简短代码的精神。。。我有一个数字或空字符串的列表,我希望map(int, mylist)
不会失败。在
mylist = "123//456".split("/") #['123', '', '456']
myints = <something to quickly convert the list>
需要编辑相同的令牌数。一、 e.myints = [123, 0, 456]
。在
我想的是map(lambda x: int(x) or 0, mylist)
,但这当然还是抛出了ValueError
。有什么想法吗?在
另一个编辑
一些结果(计时for xrange(1000000)
)。。。在
l = [x.isdigit() and int(x) or 0 for x in mylist]
l = [int(x) if x.isdigit() else 0 for x in mylist]
the big chunk of code with try/except
所以越大越慢:)好吧,不总是这样只是包括这些时间,因为他们不产生期望的输出。。。在
l = map(int, re.findall('[0-9]+', "123//456"))
('过程正则表达式很慢。时间和地点)[int(x) for x in mylist if x]
(好时候!)在我应该提一下,re.compile
将3.71秒降至2.11秒。
Python 2.7.3, Xeon E5-1607
myints = [int(x or 0) for x in mylist]
不仅最快,结果正确,而且非常短,只有29个字符。在
谢谢大家的意见!不太可能是落选者:P
短并不总是最好的,但这是相当短的:
同时:
^{pr2}$简短,尽管不如其他答案可靠--
x
必须是空字符串或数字:如您所愿,它保持相同数量的标记,并将非数字字符串替换为零。在
编辑:您也可以通过理解进行编辑:
^{pr2}$相关问题 更多 >
编程相关推荐