Python 当元组列表为'';

Python 当元组列表为'';,python,python-2.7,list-comprehension,Python,Python 2.7,List Comprehension,我有一个巨大的元组列表,看起来像: data =[ ('-0.167969896634', '0.475981802514', ''), ('-0.186100643368', '0.47510168705', ''), ('-0.205064369305', '0.476225633961', ''), ...] 我需要删除“”并将它们全部转换为浮点数,但我不确定如何执行。我试过这个: [tuple(float(x) for x in t) for t in da

我有一个巨大的元组列表,看起来像:

data =[
    ('-0.167969896634', '0.475981802514', ''), 
    ('-0.186100643368', '0.47510168705', ''), 
    ('-0.205064369305', '0.476225633961', ''),
...]
我需要删除“”并将它们全部转换为浮点数,但我不确定如何执行。我试过这个:

[tuple(float(x) for x in t) for t in data]

但是,它会告诉我,
str
无法转换为类型
float
,我怀疑可能是
'
部分?

您可以使用try/except块进行转换,如:

代码: 测试代码: 结果:
可以使用try/except块进行转换,如:

代码: 测试代码: 结果:
如果空字符串是浮点中唯一的非数值,则只需将其过滤掉:

>>> tuple(map(float, filter(lambda s: s, ('1.23', '3.14', ''))))
(1.23, 3.14)
或者简单地
None
标识功能:

>>> tuple(map(float, filter(None, ('1.23', '3.14', ''))))
(1.23, 3.14)

如果空字符串是浮点中唯一的非数值,则只需将其过滤掉:

>>> tuple(map(float, filter(lambda s: s, ('1.23', '3.14', ''))))
(1.23, 3.14)
或者简单地
None
标识功能:

>>> tuple(map(float, filter(None, ('1.23', '3.14', ''))))
(1.23, 3.14)

一个简单的列表理解将与和一起完成这项工作
filter
将用于过滤出
None
值,
map
将用于将过滤后的字符串强制转换为
float

>>> [tuple(map(float,filter(None, a))) for a in data]
>>> [
      (-0.167969896634, 0.475981802514), 
      (-0.186100643368, 0.47510168705), 
      (-0.205064369305, 0.476225633961)
    ]

一个简单的列表理解将与和一起完成这项工作
filter
将用于过滤出
None
值,
map
将用于将过滤后的字符串强制转换为
float

>>> [tuple(map(float,filter(None, a))) for a in data]
>>> [
      (-0.167969896634, 0.475981802514), 
      (-0.186100643368, 0.47510168705), 
      (-0.205064369305, 0.476225633961)
    ]


是的,之所以出现此错误,是因为空字符串
'
无法正确转换为浮点。如何删除“”部分?只需查看答案“将它们全部转换为浮点”表示您希望将
'
转换为0.0,或者希望将除
'
以外的所有内容都转换为浮点?你有答案告诉你如何做这两件事,因为你的问题模棱两可。还有…你所有的元组都是3个元素,最后一个总是空字符串,前两个从来没有?如果是这样,只删除最后一个元素可能比检查所有元素的值要简单得多。如果没有…你确定要这样做吗?如果有些元组没有空字符串,有些元组有1,有些元组有3,那么最终会得到一个长度不同的元组列表,这是完全合法的,但不是那么常见(通常元组中的位置意味着什么)。是的,出现此错误是因为无法将空字符串
'
正确转换为浮点。如何删除“”部分?请查看答案“将它们全部转换为浮点”表示要将
'
转换为0.0,或者要将除
'
以外的所有内容都转换为浮点?你有答案告诉你如何做这两件事,因为你的问题模棱两可。还有…你所有的元组都是3个元素,最后一个总是空字符串,前两个从来没有?如果是这样,只删除最后一个元素可能比检查所有元素的值要简单得多。如果没有…你确定要这样做吗?如果有些元组没有空字符串,有些元组有1个,有些元组有3个,那么您将得到一个长度不同的元组列表,这是完全合法的,但并不完全相同(通常元组中的位置意味着什么)。将
lambda s:s
更改为
None
;当传递
filter
None
,我尝试了:tuple(map(float,filter(None,data)),它仍然说我无法将str“”转换为float@ColinRunnion它可以工作,请参见我编辑的答案。错误应该发生在代码中的其他地方。我明白了!抱歉,我的屏幕更新速度似乎没有超过我的响应速度。谢谢你的帮助@colinrunning:看起来你的字符串不是空的,它们里面有空格。将
filter
功能更改为
str.strip
而不是
None
,它应该可以正常工作。将
lambda s:s
更改为
None
;当传递
filter
None
,我尝试了:tuple(map(float,filter(None,data)),它仍然说我无法将str“”转换为float@ColinRunnion它可以工作,请参见我编辑的答案。错误应该发生在代码中的其他地方。我明白了!抱歉,我的屏幕更新速度似乎没有超过我的响应速度。谢谢你的帮助@colinrunning:看起来你的字符串不是空的,它们里面有空格。将
filter
功能更改为
str.strip
而不是
None
,它应该可以正常工作。这对我的应用程序肯定有效!谢谢这绝对适用于我的申请!谢谢