python 兩個列表元素過濾的幾個簡寫方法

2021-10-09 12:06:32 字數 2051 閱讀 6030

正在優化約數,對乙個數的約數結果進行分析:

8008**0.5=89.487429284788374682747794919658

但是8008=2002*4=2002*(2**2)

那麼他其實只需要計算出2002的約數,在與4或者2進行怎樣的組合就可以了,於是分析8008和2002的約數規律:

2002的約數=[1, 2, 7, 11, 13, 14, 22, 26, 77, 91, 143, 154, 182, 286, 1001, 2002]

8008的約數=[1, 2, 4, 7, 8, 11, 13, 14, 22, 26, 28, 44, 52, 56, 77, 88, 91, 104, 143, 154, 182, 286, 308, 364, 572, 616, 728, 1001, 1144, 2002, 4004, 8008]

只需要8008的約數列表去掉2002的約數元素,就是2002的約數沒有的,這些元素與2002的約數規律如何。

但乙個列表去除另乙個列表元素的方法有很多,不自覺地就像試一下!

(l3:

=list

(set

(l2)

-set

(l1)))

.sort(

)#5.02 µs ± 112 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

l3=[i for i in l2 if i not

in l1]

#11.5 µs ± 49.3 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

l3=[

]for i in l2:

if i not

#12.5 µs ± 31.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

l3=list

(filter

(lambda i:

true

if i not

in l1 else

false

,l2)

)#15.2 µs ± 56.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

方法1、列表、集合互轉,利用集合的運算去除元素,轉回列表在原地排序下,因為利用了python的核心,所以速度666

方法2、[for if],這個簡寫很好使

方法3、是原生思路,也是方法2的原型,速度這次稍稍的比方法2慢一點,不知道是偶然還是必然,抑或是方法2的元素注入方式的特殊性,這裡鄙人無法考究。

方法4、本想利用map實現lambda的功能,但是未果。網友提到這個功能是filter實現的,或者說filter就是為此存在的,這麼說來,filter說不定算是,map的變種。

list

(map

(lambda i:i if i not

in l1 else

none

,l2)

)

map語法成立的僅有這一項,但是none也是會顯示的,現在有個疑問,如果想同時運算資料並篩選資料,那應該怎麼辦!?

list

(filter

(lambda a:

true

if a!=

none

else

false

,list

(map

(lambda i:i+

1if i not

in l1 else

none

,l2)))

)

23.2 µs ± 761 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

運算時間翻倍

l3=

[i+1

for i in l2 if i not

in l1]

列表刪除前面兩個元素 python中的列表(上)

我們分享完了條件迴圈結構,接下來先回到前面資料型別,前面資料型別只分享了字串和數字這兩種,這一次,霖小白來分享分享另一種重要的資料型別 列表。思維導圖呢等最後一篇列表分享後再放喔。在python中,用中括號 來表示列表,並用逗號來分隔其中的元素。列表由一系列按特定順序排序的元素組成,可以建立包含字母...

兩個列表中元素比較

rules 模擬 確保每位使用者的使用者名稱都有獨一無二的方式 1.建立乙個當前使用者名稱列表current users 2.建立乙個新的使用者名稱列表new users,確保其中有一兩個使用者名稱也包含在 current users中 3.遍歷列表new users,對於其中每個使用者名稱,都檢查...

python中取兩個列表中不同的元素

print i for i in c if i not in b 注 b為報表中輸出的酒店列表,c為酒店提供的列表,現在c為2865家,而報表中輸出的只有2842家。有23家沒有輸出,需要確認這23家是不是真的沒有price資料。目前工作中客戶總是提出增加hotel列表的需求,測試時每次都需要抽查新...