将字符串列表转换为整数列表

时间:2014-03-18 04:25:25

标签: python list

所以我有一个字符串a = ['1', '2', '']a = ['1', '2', 'NAN']的列表,我希望将其转换为[1, 2, 0][1, 2, -1](即NAN到{{ 1}});我用了 -1,但收到了错误

a = [int(ele) for ele in a]

因此无法自动转换空字符串。当然我可以明确地遍历列表,但我想知道是否有更优雅/紧凑/有效的方式。

7 个答案:

答案 0 :(得分:3)

尝试这样的事情:

>> a = ['1', '2', '']
>>> def toint(s, default=0):
...     try:
...         return int(s)
...     except ValueError:
...         return default
...
>>> [toint(x) for x in a]
[1, 2, 0]
>>>

这具有符合Python Duck Typing惯用法的额外好处,并且如果处理数据导致ValueError异常,则可以灵活地更改默认值。 e.g:

>>> [toint(x, None) for x in a]
[1, 2, None]

答案 1 :(得分:1)

您可以编写一个使用int的函数,然后对失败执行回退条件,为输入字符串执行所需操作,然后在列表推导语句中调用该函数。

示例:

def converter(ele):
    # result = your integer conversion logic
    return result

a = [converter(ele) for ele in elements]

答案 2 :(得分:0)

稍微修改一下列表理解:

a = [int(ele) if ele else 0 for ele in a]

给出你想要的东西。如果非数字是'',如果它是NAN,则这将起作用。如果“NAN”是列表的一部分,则可以执行此操作:

a = [int(ele) if ele != 'NAN' else 0 for ele in a]

答案 3 :(得分:0)

使用dict处理您的异常值

a = [int({'NAN': '-1', '': 0}.get(i, i)) for i in a] 

答案 4 :(得分:0)

>>> a = ['1', '2', '', 'NAN']

>>> listofInt =  map(lambda s: int(s) if s not in 'NAN' else  -1 if s == 'NAN' else 0, a)

>>> print listofInt

>>> [1, 2, 0, -1]

你甚至可以写一个lambda函数作为匿名函数。

答案 5 :(得分:0)

>>> a = ['1', '2', 'NAN', '']
>>> 
>>> def to_int(value):
...     try:
...         return int(value)
...     except ValueError:
...         if value == 'NAN':
...             return -1
...         return 0
... 
>>> [to_int(x) for x in a]
[1, 2, -1, 0]
>>> 

答案 6 :(得分:0)

def convert(myList):
    newList = [0]*len(myList)
    for i in range(len(myList)):
        try:
            newList[i] = int(myList[i])
        except:
            newList[i] = -1
    return newList

显然这个尝试/除了只是为任何无法转换为整数

的东西放-1 如果myList [i] ==' NAN':newList [i] = - 1

很容易转换为更具体的