欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 實(shí)現(xiàn)數(shù)組相減示例

 更新時(shí)間:2019年12月27日 10:15:10   作者:執(zhí)假以為真  
今天小編就為大家分享一篇Python 實(shí)現(xiàn)數(shù)組相減示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

問(wèn)題描述:

有2個(gè)數(shù)組如下

a = [3,3,3,4,4,4,5,6,7]
b = [3,3,4,4]

第1題:從數(shù)組a中刪除所有在數(shù)組b中出現(xiàn)過(guò)的元素。對(duì)于上例來(lái)說(shuō),a刪除結(jié)束應(yīng)該等于 [5, 6, 7].

第2題:實(shí)現(xiàn) c = a - b , c應(yīng)該等于[3, 4, 5, 6, 7].

先看第1題:

常規(guī)的思維大致會(huì)這么寫代碼:

for i in a:
 if i in b:
  a.remove(i)

這么寫是錯(cuò)誤的,如果在for循環(huán)外面加一句打印語(yǔ)句,則會(huì)發(fā)現(xiàn)a變成了一個(gè)奇怪的數(shù)組: [3, 4, 4, 5, 6, 7]

刪倒也刪了幾個(gè),但是又沒(méi)有刪除干凈。(原因后面會(huì)講)

那么,第1題的正確的做法是什么呢?

其實(shí)正確的做法很簡(jiǎn)潔。如下:

a = [i for i in a if i not in b]

再看第2題:

在公布第2題的答案之前,首先我們要弄清楚,為什么本文最初的一段代碼是錯(cuò)的?原因就是,當(dāng)做了a.remove(i)之后,遍歷數(shù)組的游標(biāo)會(huì)繼續(xù)右移,然而此時(shí)因?yàn)橐呀?jīng)remove過(guò)一個(gè)元素了,所以,游標(biāo)應(yīng)該保持原位置不動(dòng),而不是繼續(xù)右移。知道了這個(gè)原理之后,我們就有辦法來(lái)寫 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 of a")
  break

print(c) # c = a - b

以上這篇Python 實(shí)現(xiàn)數(shù)組相減示例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論