[英]How to remove values from item list
我是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)]
使用list.remove
-这将修改rank_item
就地列表:
rank_item.remove( (10, 0.0) )
rank_item
将包含:
[(9, 0.99999999745996648), (8, 0.99999996796861101), (1, 0.99999996796861101)]
或者,如果要从列表中删除所有元组,其位置1的值为0.0
,则可以尝试列表推导 ,例如:
[ x for x in rank_item if x[1] != 0.0 ]
[x for x in rank_item if x[1] != 0.0]
>>> [i for i in rank_item if i[1]]
[(9, 0.9999999974599665), (8, 0.999999967968611), (1, 0.999999967968611)]
对于更一般的情况,您可以使用列表推导:
new_list = [(a, b) for a, b in old_list if b != 0]
这只会返回第二个元素与零不同的元组; 您可以调整此行为以满足您的需求。
与使用索引相反,该方法有利于清楚地标记每个元素。
速度测试:
>>> 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.