本着短代码的精神......我有一个数字或空字符串列表,我希望map(int, mylist)它不会失败。
mylist = "123//456".split("/") #['123', '', '456']
myints = <something to quickly convert the list>
编辑 我需要保持相同数量的令牌。即myints = [123, 0, 456]。
我在想一些类似的东西map(lambda x: int(x) or 0, mylist),但是当然这仍然会抛出一个ValueError. 有任何想法吗?
另一个编辑
一些结果(时间for xrange(1000000))...
- 2.03s
l = map(lambda x: x.isdigit() and int(x) or 0, mylist) - 1.37s
l = [x.isdigit() and int(x) or 0 for x in mylist] - 1.99s
l = map(lambda x: int(x) if x.isdigit() else 0, mylist) - 1.35s
l = [int(x) if x.isdigit() else 0 for x in mylist] - 1.24s
l = [int(x or 0) for x in mylist] - 1.45s
l = [int(e) if e.strip() else 0 for e in mylist] - 4.44s
the big chunk of code with try/exceptergo 越大越慢 :) 好的,并非总是如此
只是将这些包括在他们的时间里,因为它们没有产生所需的输出......
- 3.71s
l = map(int, re.findall('[0-9]+', "123//456"))('课程正则表达式很慢。时间和地点) - 1.47s
l = map(int, filter(None, mylist)) - 1.15 秒
[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