【Python初級】由判定迴文數想到的,關於深淺複製,以及字串反轉的問題
嘗試用Python實現可以說是一個很經典的問題,判斷迴文數。
讓我們再來看看回文數是怎麼定義的:
回數是指從左向右讀和從右向左讀都是一樣的數,例如1,121,909,666等
解決這個問題的思路,可以說大體上分為兩種:
1.從首部和尾部同時向中間靠攏,判定首尾數字是否相等(比較複雜)
2.直接反轉數字,看反轉前反轉後數字是否相等(最常用)
第一種方法也可以理解為一種更加複雜,但是思想不變的第二種方法。
其中我一開始的程式碼是這樣寫的:
1 def is_palindrome(n): 2 L1=list(str(n)) 3 L2=L1 4 L1.reverse() 5 if L2==L1: 6 return True 7 else: 8 return False
但後來發現無論傳入的是什麼數字,都會被判定為迴文數。一開始百思不得其解,後來無意中想起來了python中變數名是看作指向實際物件的指標,所以是不是程式碼中對L1內容的更改,L2指向的內容也會被一同發生更改呢?
看了下面的這篇文章,恍然大悟
然後import了copy包,並更改了程式碼,總算是正常了。正常的程式碼如下:
1 def is_palindrome(n): 2 L1=list(str(n)) 3 L2=copy.deepcopy((L1))#我這裡使用的是深複製,其實淺複製在這個環境問題下也可以哦 4 L1.reverse() 5 if L2==L1: 6 return True 7 else: 8 return False
最後總算是能正常判定迴文數了。但還沒完,在網上看到了大神更加簡潔的程式碼:
1 def is_palindrome(n): 2 temp1=str(n) 3 return temp1==temp1[::-1]
為什麼能如此簡潔呢?原因就是,根據一開始提到的演算法,核心就在於字串的倒置。而利用python的切片功能,剛好可以方便的實現倒置,而且還不用考慮深淺複製問題。這裡也給大家貼一個介紹python中常見的字串倒置方法的博文(面試必備哦)
相關文章
- JavaScript 深複製的迴圈引用問題JavaScript
- python 的深淺複製Python
- 淺複製、深複製與序列化【初級Java必需理解的概念】Java
- Python列表的深淺複製Python
- python 淺複製、深複製坑Python
- python 深複製和淺複製Python
- python深複製和淺複製的區別Python
- go的深複製跟淺複製Go
- Python中的賦值與淺複製與深複製之間的關係Python賦值
- 淺複製和深複製的概念與值複製和指標複製(引用複製)有關 淺複製 “指標複製 深複製 值複製指標
- 淺顯直白的Python深複製與淺複製區別說明Python
- JavaScript中的淺複製與深複製JavaScript
- js 淺拷貝(淺複製、淺克隆)、深拷貝(深複製、深克隆)JS
- 淺談JS中物件的淺複製和深複製JS物件
- 聊一聊web前端那些事兒,關於深複製和淺複製Web前端
- Go 語言傳值和深淺複製問題Go
- Java引用複製、淺複製、深複製Java
- LeetCode初級-反轉字串LeetCode字串
- JavaScript 淺複製和深複製JavaScript
- python 深/淺複製及其區別Python
- 對於複製普通物件 深複製和淺複製是否一樣物件
- 詳談Javascript中的深複製和淺複製JavaScript
- C#中的物件深複製和淺複製C#物件
- JS物件複製:深複製和淺複製JS物件
- go slice深複製和淺複製Go
- c#淺複製與深複製C#
- Java中物件的深複製和淺複製詳解Java物件
- 25. 深淺複製
- 初級Python中map函式的運用以及列表轉字串的方法Python函式字串
- Java 中的深複製和淺複製你瞭解嗎?Java
- 素數判定演算法 初級演算法
- 一文帶你瞭解js資料儲存及深複製(深拷貝)與淺複製(淺拷貝)JS
- 由淺入深學python(一)Python
- 尾遞迴實現深複製遞迴
- 關於Promise的九深一淺Promise
- 解決關於Mac不能複製複製檔案到隨身碟的問題Mac
- Python面試必備一之迭代器、生成器、淺複製、深複製Python面試
- MySQL級聯複製的同步問題(一)MySql