我经常发现自己的列表看起来像这样:
lst = ['A', '1', '2', 'B', '1', 'C', 'D', '4', '1', '4', '5', 'Z', 'D']
将此列表中的特定字符串转换为整数的最pythonic方法是什么?
我通常做这样的事情:
lst = [lst[0], int(lst[1]), int(lst[2]), lst[3], ...]
上述方法似乎有误。有没有更好的方法将列表中的某些项目转换为整数?
答案 0 :(得分:10)
我想说的是:
>>> lst = ['A', '1', '2', 'B', '1', 'C', 'D', '4', '1', '4', '5', 'Z', 'D']
>>> lst = [int(s) if s.isdigit() else s for s in lst]
>>> lst
['A', 1, 2, 'B', 1, 'C', 'D', 4, 1, 4, 5, 'Z', 'D']
答案 1 :(得分:5)
int
和.isdigit
在Unicode情况下可能不一致,即int
可能无法解析字符串,即使.isdigit
为字符串返回True
。< / p>
def maybe_int(s):
try:
return int(s)
except ValueError:
return s
lst = [maybe_int(s) for s in lst]
答案 2 :(得分:0)
@FatalError答案可能就是你要找的,但如果你想把一些项目(不是所有的数字)转换成整数,你可以这样做:
>>> lst = ['A', '1', '2', 'B', '1', 'C', 'D', '4', '1', '4', '5', 'Z', 'D']
>>> indices = [1,2]
>>> [int(lst[x]) if x in indices else lst[x] for x in xrange(len(lst))]
['A', 1, 2, 'B', '1', 'C', 'D', '4', '1', '4', '5', 'Z', 'D']