所以我有一个字符串a = ['1', '2', '']
或a = ['1', '2', 'NAN']
的列表,我希望将其转换为[1, 2, 0]
或[1, 2, -1]
(即NAN
到{{ 1}});我用了
-1
,但收到了错误
a = [int(ele) for ele in a]
因此无法自动转换空字符串。当然我可以明确地遍历列表,但我想知道是否有更优雅/紧凑/有效的方式。
答案 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 ,很容易转换为更具体的