删除元组列表的元素是''

时间:2018-03-21 00:58:33

标签: 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 data]

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

3 个答案:

答案 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)

简单的列表理解将与filtermap一起完成。 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