如何从项目列表中删除值

时间:2010-07-08 16:40:04

标签: python

我是python的新手。我的项目列表如下所示:

rank_item = [ 
    (9, 0.99999999745996648), 
    (8, 0.99999996796861101), 
    (1, 0.99999996796861101), 
    (10, 0.0) ]

问题是如何删除值为0.0的项目列表并返回

[(9, 0.99999999745996648), (8, 0.99999996796861101), (1, 0.99999996796861101)]

5 个答案:

答案 0 :(得分:5)

使用list.remove - 这将修改您的rank_item列表就地

 rank_item.remove( (10, 0.0) )

rank_item将包含:

[(9, 0.99999999745996648), (8, 0.99999996796861101), (1, 0.99999996796861101)]

或者,如果您要从列表中删除位置1中值为0.0的所有元组,则可以尝试list comprehension,例如:

[ x for x in rank_item if x[1] != 0.0 ]

答案 1 :(得分:5)

[x for x in rank_item if x[1] != 0.0]

答案 2 :(得分:3)

>>> [i for i in rank_item if i[1]]
[(9, 0.9999999974599665), (8, 0.999999967968611), (1, 0.999999967968611)]

答案 3 :(得分:1)

对于更一般的情况,您可以使用列表推导:

new_list = [(a, b) for a, b in old_list if b != 0]

这只会返回第二个元素与零不同的元组;您可以调整此行为以满足您的需求。

与使用索引相反,此方法有利于对每个元素进行清晰标记。

答案 4 :(得分:1)

速度测试:

>>> import timeit
>>> it = lambda : list(filter(lambda x: x[1]!=0, rank_item))
>>> timeit.timeit(it)
3.7716277663630535

>>> it2 = lambda: [x for x in rank_item if x[1] != 0.0]
>>> timeit.timeit(it2)
1.2550897693390652

>>> it3 = lambda: [i for i in rank_item if i[1]]
>>> timeit.timeit(it3)
1.147179730129892

>>> it4 = lambda: list(itertools.takewhile(lambda x: x[1] != 0, rank_item))
>>> timeit.timeit(it4)
3.8272935335999136
相关问题