這個問題在這里已經有了答案: 如何在 Python 中根據條件洗掉串列元素 6 個答案 4 小時前關閉。
如何在 python 中使用“removeIf”?在java中,我可以使用:
list.removeIf(c -> c.num > 5);
但是我怎么能在python中做到這一點?如果我使用 for 回圈:
for c in list:
if (c.num > 5):
list.remove(c)
它會很慢,那么我怎樣才能在 python 中更快地做到這一點?
uj5u.com熱心網友回復:
Python物件沒有與Javalist具有相同功能的內置方法。removeif
僅使用 Python 代碼/內置程式的最佳選擇可能是
my_list = [3, 8, 2, 9]
my_list = [elem for elem in my_list if elem > 5]
我承認這并不能解決您的速度問題。但是,如果您想使用 Pythonlist而不撰寫 C 代碼來構造物件(或變體)的removeif方法list,那將是不可能的。
在numpy(主要用 C 撰寫并以為許多應用程式提供類似 C 的性能而聞名)你可以做
import numpy as np
a = np.array([3, 8, 2, 9])
a = a[(a > 5)]
我發現大型陣列/串列比 Python 串列理解方式要快得多。例如,
from timeit import timeit
import numpy as np
import random
random.seed()
a = [random.randint(0, 10) for i in range(0, 1000)]
b = np.array(a)
if __name__ == '__main__':
print(timeit("c = [e for e in a if e > 5]", globals=globals()))
print(timeit("c = b[(b > 5)]", globals=globals()))
輸出
23.249513714108616
3.3291189779993147
將串列和陣列更改為只有少量元素(例如 10 個)會產生輸出
0.28009856096468866
0.9653107749763876
在具有大量元素 (1000) 的示例中,該numpy方法要快得多。相比之下,在具有少量元素 (10) 的示例中,串列理解方法更快。
我希望這有助于和/或為您提供一些關于如何最好地實作您的應用程式的想法。
uj5u.com熱心網友回復:
使用串列推導:
data = [x for x in data if x.num > 5]
請注意,您需要對資料執行某種迭代,以確定是保留還是洗掉結果中的元素。(即使迭代結構不明確,無論您使用什么,都可能在后臺使用迭代。)通常,在迭代串列時修改串列是個壞主意。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454729.html
