1

我想对浮点数列表进行排序并取出所有值 = 0,并将列表的元素保留为浮点数。这可能吗?


我已经尝试过a[:] = [x for x in a if x != 0],但这给了我这个错误:

 a[:] = [x for x in a if x != 0]
TypeError: 'float' object is not iterable

所以然后我尝试a[:] = [x for x in range(len(a)) if x != 0]了但得到了一个新的错误:

 a[:] = [x for x in range(len(a)) if x != 0]
TypeError: object of type 'float' has no len()

还有什么方法可以解决这个问题?顺序不必保留,我不需要要删除的元素的索引。

4

3 回答 3

3

a的对象是一个浮点数,而不是一个列表

>>> a=[1,2,3,0,4]
>>> a=[x for x in a if x!=0]
>>> a
[1, 2, 3, 4]
于 2013-07-12T13:41:59.680 回答
2

如果您只是从列表中删除 0,那么布鲁斯的答案会更简洁。但是,如果您希望从列表中删除所有非浮点数,您可以这样做:

>>> a = [1.2, 3, 4, 6, 0, 4.5, 3.2]
>>> a = [b for b in a if isinstance(b, float)]
>>> a
[1.2, 4.5, 3.2]
>>>
于 2013-07-12T14:12:31.933 回答
0
blacklist = [0]
blacklist = set(blacklist)
myList = [e for e in myList if int(e) not in blacklist]

更好的是,将您的黑名单设为 s 的集合float

blacklist = [0]
blacklist = set([float(i) for i in blacklist])
myList = [e for e in myList if int(e) not in blacklist]
于 2013-07-12T13:42:06.450 回答