Python 實(shí)現(xiàn)數(shù)組相減示例
問題描述:
有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)過的元素。對于上例來說,a刪除結(jié)束應(yīng)該等于 [5, 6, 7].
第2題:實(shí)現(xiàn) c = a - b , c應(yīng)該等于[3, 4, 5, 6, 7].
先看第1題:
常規(guī)的思維大致會這么寫代碼:
for i in a: if i in b: a.remove(i)
這么寫是錯(cuò)誤的,如果在for循環(huán)外面加一句打印語句,則會發(fā)現(xiàn)a變成了一個(gè)奇怪的數(shù)組: [3, 4, 4, 5, 6, 7]
刪倒也刪了幾個(gè),但是又沒有刪除干凈。(原因后面會講)
那么,第1題的正確的做法是什么呢?
其實(shí)正確的做法很簡潔。如下:
a = [i for i in a if i not in b]
再看第2題:
在公布第2題的答案之前,首先我們要弄清楚,為什么本文最初的一段代碼是錯(cuò)的?原因就是,當(dāng)做了a.remove(i)之后,遍歷數(shù)組的游標(biāo)會繼續(xù)右移,然而此時(shí)因?yàn)橐呀?jīng)remove過一個(gè)元素了,所以,游標(biāo)應(yīng)該保持原位置不動,而不是繼續(xù)右移。知道了這個(gè)原理之后,我們就有辦法來寫 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ù)組相減示例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
在ipython notebook中使用argparse方式
這篇文章主要介紹了在ipython notebook中使用argparse方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
在python中實(shí)現(xiàn)發(fā)送短信功能
工作中我們經(jīng)常會用到發(fā)短信的需求,那么如何在python代碼中實(shí)現(xiàn)發(fā)短息你的需求呢,本文我們就一起深入探討下,文中有詳細(xì)的代碼示例供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下2024-04-04
Python?數(shù)據(jù)可視化超詳細(xì)講解折線圖的實(shí)現(xiàn)
數(shù)據(jù)可以幫助我們描述這個(gè)世界、闡釋自己的想法和展示自己的成果,但如果只有單調(diào)乏味的文本和數(shù)字,我們卻往往能難抓住觀眾的眼球。而很多時(shí)候,一張漂亮的可視化圖表就足以勝過千言萬語,讓我們來用Python實(shí)現(xiàn)一個(gè)可視化的折線圖2022-03-03
Pandas中`ValueError: cannot reindex from
在Pandas中,ValueError: cannot reindex from a duplicate axis錯(cuò)誤通常發(fā)生在嘗試對包含重復(fù)索引的DataFrame或Series進(jìn)行重新索引(reindex)時(shí),所以本文介紹了Pandas中`ValueError: cannot reindex from a duplicate axis`錯(cuò)誤分析及解決辦法,需要的朋友可以參考下2024-07-07

