問題描述:
有2個陣列如下
a = [3,3,3,4,4,4,5,6,7]
b = [3,3,4,4]
第1題:從陣列a中刪除所有在陣列b**現過的元素。對於上例來說,a刪除結束應該等於 [5, 6, 7].
第2題:實現 c = a - b , c應該等於[3, 4, 5, 6, 7].
先看第1題:
常規的思維大致會這麼寫**:
for i in a:
if i in b:
a.remove(i)
這麼寫是錯誤的,如果在for迴圈外面加一句列印語句,則會發現a變成了乙個奇怪的陣列: [3, 4, 4,程式設計客棧 5, 6, 7]
刪倒也刪了幾個,但是www.cppcns.com又沒有刪除乾淨。(原因後面會講)
那麼,第1題的正確的做法是什麼呢?
其實正確的做法很簡潔。如下:
a = [i for i in a if i not in b]
再看第2題:
在公布第2題的答案之前,首先我們要弄清楚,為什麼本文最初的一段**是錯的?原因就是,當做了a.remove(i)之後,遍歷陣列的游標會繼續右移,然而此時因為已經remove過乙個元素了,所以,游標應該保持原位置不動,而不是繼續右移。知道了這個原理之後,我們就有辦法來寫 a - b 了:
import copy
c = copy.deepcopy(a)
while len(b) > 0:
if b[0] in c:
程式設計客棧 c.remove(b[0])
b.remove(b[0])
else:
程式設計客棧 print("error: b is not a sub set ofevneu a")
break
print(c) # c = a - b
本文標題: python 實現陣列相減示例
本文位址:
Python實現的旋轉陣列功能演算法示例
一 題目 給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。例1 輸入 1,2,3,4,和 k 3 輸出 5,6,7,1,2,3,4 解釋 向右旋轉 1 步 7,1,2,3,4,5,6 向右旋轉 2 步 6,7,1,2,3,4,5 向右旋轉 3 步 5,6,7,1,2,3,4 例...
python 時間相減 python處理時間加減
用python做資料統計分析時,原始日誌檔案中使用者訪問的時間不對,需要往後延8小時,記錄一下 import datetime pagetime 2014 05 11 16 44 12 pagetime 2014 05 11 16 44 12 1.把pagetime字串型別轉換成datetime時間...
Python日期 月份 相減思路
python有day相減的函式datetime.datetime.timedelta 但是沒有月相減的,蛋疼,自己來吧,達到目的就行了,我只要2013 02 10這樣的格式就 ok了,把時間格式化成這樣不難吧,接下來就簡單了 啦啦啦,處理字串就行了,然後就有了下面的函式 只是得到上乙個月哦,我的目的...