我有大量的元组列表,如下所示:
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
类型,我怀疑它可能是''
部分?
答案 0 :(得分:3)
您可以使用try / except块进行转换,例如:
def convert(a_float):
try:
return float(a_float)
except ValueError:
return 0
data = [('-0.167969896634', '0.475981802514', ''),
('-0.186100643368', '0.47510168705', ''),
('-0.205064369305', '0.476225633961', '')
]
new_data = [tuple(convert(f) for f in t) for t in data]
print(new_data)
[(-0.167969896634, 0.475981802514, 0),
(-0.186100643368, 0.47510168705, 0),
(-0.205064369305, 0.476225633961, 0)]
答案 1 :(得分:2)
如果空字符串是浮点数中唯一的非数字值,则只需将其过滤掉:
>>> 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)
答案 2 :(得分:1)
简单的列表理解将与filter
和map
一起完成。 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)
]
nx=`convert original.png -format "%[fx:w/32]" info:`
ny=`convert original.png -format "%[fx:h/32]" info:`
num=$((nx*ny-1))
montage tile.png -duplicate $num -tile ${nx}x${ny} -geometry +0+0 result.png