查看完整版本: Python關於抓取幾筆資料的count問題(已解決,感謝各位前輩)
頁: [1]

chialewang 發表於 2019-8-16 12:08 AM

Python關於抓取幾筆資料的count問題(已解決,感謝各位前輩)

本帖最後由 chialewang 於 2019-8-18 06:07 PM 編輯

各位前輩 您們好:

程式碼:

list1 =
print(list1 * 50)
print(list1.count(123))

照理說應該顯示25
為何程式只顯示1呢?

麻煩有空的前輩指導一下 感恩
<div></div>

codewice 發表於 2019-8-16 01:04 AM

第一個 print 的內容,是「回傳一個新的 list,新的 list 則是把原來的 list 重複五十遍」,但是「不會更改到原本的 list 內容」

所以你第二個 print 是去問「原來的 list 裡面有幾個 123」,答案就是 1

如果你想修改原來的 list,做法是

list1 =
list1 = list1 * 50
print(list1.count(123))

但這樣結果是 50,不會是 25  XDDDDD

codewice 發表於 2019-8-16 01:20 AM

附註一下,通常程式裡面的等號「=」其實是 assignment (賦值) 的意思,跟數學裡面的等號不一樣。你可以把它「想像」成一個箭頭,把數值塞進去變數裡面

就像一般數學有先乘除後加減的優先順序,程式裡面也有運算的優先順序
看這篇文件
https://docs.python.org/3/reference/expressions.html#evaluation-order

Python evaluates expressions from left to right. Notice that while evaluating an assignment, the right-hand side is evaluated before the left-hand side.

Python 從左運算到右,但是遇到 assignement 的時候,會先運算右邊的東西。

回頭看 list1 = list1 * 50,這裡有兩個 operator 1. "="  2. "*"

先運算右邊的 list1 * 50 之後得到一個很長的 list,python 的執行環境會先把這個結果放在一個神秘隱晦你也不知道他叫什麼名字的變數裡面,此時你有兩個 list,一個是原來的 list1,一個是你不知道它叫什麼名字的 list。接著運算等號的時候,就把那個很長的 list 塞給了 list1。至於原本的 list1 那個短短的內容,就成為無主的孤兒,等著被系統回收掉。

ps. 上面的解釋跟 runtime 真實運作的情況不同,只是方便解說所以簡化了很多細節。...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

ddttdtxb 發表於 2019-8-17 11:48 AM

補一個除錯… 也是學習技巧。
如果搞不清楚發生什麼事,就把它先印出來…
畢竟人又不是電腦,會記不住或記錯。 印出來最準。

所以把樓主的程式,多加一次 print 就能看出問題…list1 =
print(list1 * 50)

# 不知發什麼事? 先印出來看看
print('=====這是不讓資料混一起的分隔線=====')
print(list1)
print(list1.count(123))另外補 3 點…
1. Python 不流行用分號(;) 作結尾,雖然不會出錯…  
(這就是我在其它文章說,先專精一種語言的原因)
2. eyny 的文章,有 code 輸入的語法…
(問程式最好要使用它,不然程式多,讀起來很痛苦,想回答的人就變少了)
3. 也可以多用線上免費資源… 像是 Repl.it epl.it 之類…
(回答問題的人可以直接執行你的程式,不必由腦袋去想,去猜)

剛剛的程式可以用 這樣 來分享...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

chialewang 發表於 2019-8-17 12:00 PM

codewice 發表於 2019-8-16 01:04 AM static/image/common/back.gif
第一個 print 的內容,是「回傳一個新的 list,新的 list 則是把原來的 list 重複五十遍」,但是「不會更改 ...

codewice 前輩 您好:

原來是我程式寫錯搞錯
感謝您的回覆

感恩<br><br><br><br><br><div></div>

chialewang 發表於 2019-8-17 12:05 PM

本帖最後由 chialewang 於 2019-8-20 10:54 AM 編輯

ddttdtxb 發表於 2019-8-17 11:48 AM static/image/common/back.gif
補一個除錯… 也是學習技巧。
如果搞不清楚發生什麼事,就把它先印出來…
畢竟人又不是電腦,會記不住或記 ...
ddttdtxb 前輩 您好:

1. Python 不流行用分號(;) 作結尾,雖然不會出錯…  
(這就是我在其它文章說,先專精一種語言的原因)
A:好的,我會改掉這個壞習慣

2. eyny 的文章,有 code 輸入的語法…
A:code 輸入的語法在哪? 我怎麼沒看見?{:38:}

3. 也可以多用線上免費資源… 像是 Repl.it epl.it 之類…
A:這怎麼用我不會耶,可是看起來蠻不錯的
我得找時間研究一下
--------------------------------------------------------

這樣嗎? https://repl.it/@jialiangwang110/AptUniqueInfinity

感謝前輩的回覆 感恩
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

ddttdtxb 發表於 2019-8-18 03:39 PM

輸入框上頭有個長得像 "<>" 符號的按鈕… 那個就是了讓你輸入程式碼的東東…或是自己輸入[/ code]也行

chialewang 發表於 2019-8-18 06:04 PM

ddttdtxb 發表於 2019-8-18 03:39 PM static/image/common/back.gif
輸入框上頭有個長得像 "" 符號的按鈕… 那個就是了讓你輸入程式碼的東東… ...

ddttdtxb 前輩 您好:

您說的是"添加文字代碼"
我有看了,也將第一篇給改了

謝謝您的指導 感恩
頁: [1]