9

私は頻繁に次のようなリストを見つけます。

lst = ['A', '1', '2', 'B', '1', 'C', 'D', '4', '1', '4', '5', 'Z', 'D']

このリストの特定の文字列をintに変換する最もPython的な方法は何ですか?

私は通常、次のようなことをします。

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場合でも、文字列の解析に失敗する可能性があります。.isdigitTrue

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 に答える