9

我经常发现自己的列表如下所示:

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], ...]

上述方法似乎是错误的。有没有更好的方法将列表中的某些项目转换为整数?

4

3 回答 3

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']
于 2013-03-02T22:35:59.497 回答
5

int并且.isdigit在 Unicode 情况下可能不同意,即int即使.isdigit返回字符串也可能无法解析True字符串。

def maybe_int(s):
    try:
        return int(s)
    except ValueError:
        return s

lst = [maybe_int(s) for s in lst]
于 2013-03-02T22:46:42.803 回答
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']
于 2013-03-02T22:50:05.093 回答