【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中常見的字串倒置方法的博文(面試必備哦)
相關文章
- python 的深淺複製Python
- JavaScript 深複製的迴圈引用問題JavaScript
- Python列表的深淺複製Python
- 淺複製、深複製與序列化【初級Java必需理解的概念】Java
- python深複製和淺複製的區別Python
- python 淺複製、深複製坑Python
- python 深複製和淺複製Python
- LeetCode初級-反轉字串LeetCode字串
- Python中的賦值與淺複製與深複製之間的關係Python賦值
- 淺顯直白的Python深複製與淺複製區別說明Python
- go的深複製跟淺複製Go
- 淺複製和深複製的概念與值複製和指標複製(引用複製)有關 淺複製 “指標複製 深複製 值複製指標
- JavaScript中的淺複製與深複製JavaScript
- python 深/淺複製及其區別Python
- 淺談JS中物件的淺複製和深複製JS物件
- 淺複製與深複製
- js 淺拷貝(淺複製、淺克隆)、深拷貝(深複製、深克隆)JS
- Go 語言傳值和深淺複製問題Go
- 聊一聊web前端那些事兒,關於深複製和淺複製Web前端
- Java引用複製、淺複製、深複製Java
- JavaScript 淺複製和深複製JavaScript
- 對於複製普通物件 深複製和淺複製是否一樣物件
- C#中的物件深複製和淺複製C#物件
- 詳談Javascript中的深複製和淺複製JavaScript
- JS物件複製:深複製和淺複製JS物件
- 字串轉數字的問題字串
- go slice深複製和淺複製Go
- 由引數URL想到的
- 25. 深淺複製
- Java 中的深複製和淺複製你瞭解嗎?Java
- js 淺複製和深複製的區別和應用JS
- 迴文數問題
- C語言 不大於2019的最大反數、迴文數C語言
- 素數判定演算法 初級演算法
- 一文帶你瞭解js資料儲存及深複製(深拷貝)與淺複製(淺拷貝)JS
- 深淺複製,溫故知新
- 關於 js 物件 轉 字串 和 深拷貝 的 探討JS物件字串
- 解決關於Mac不能複製複製檔案到隨身碟的問題Mac