正在優化約數,對乙個數的約數結果進行分析:
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列表的需求,測試時每次都需要抽查新...