簡體   English   中英

如何從項目列表中刪除值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM