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
,它应该可以正常工作。这对我的应用程序肯定有效!谢谢这绝对适用于我的申请!谢谢