顯示廣告
隱藏 ✕
※ 本文為 MindOcean 轉寄自 ptt.cc 更新時間: 2022-02-03 02:03:30
看板 Gossiping
作者 Ommm5566 (56天團)
標題 Re: [問卦] 初學Python是不是養成一堆壞習慣?
時間 Wed Feb  2 02:43:13 2022


※ 引述《dixitdeus (dixitdeus)》之銘言:
: 現在流行入門學Python,真的會養成一堆壞習慣耶
: 昨天看學生寫的code,一堆人在那邊:
: for s in list:
:     If list.index(s) % 2 == 0
: 看到快吐血
: 直接用for each loop,每次都給我call 函式找index
: 還有人寫:
: b = [1,2,3]
: c = [4,5,6]
: …
: …
: c = b[0]
: 直接把裝list的變數拿來裝int
: 可以理解python用於資料科學、機器學習的優勢
: 但初學者就學Python是不是會養成一堆壞習慣啊?
: 可以從C開始學嗎….

你在講什麼鬼  這個很顯然就是因為先學C導致寫法不pythonic

以你舉的第一個例子來說 應該會是 res = [i % 2 == 0 for i in range(len(list))]

有np的話第一個例子連for in 都省了

import numpy as np

res = np.asarray(range(len(list))) % 2 == 0


b, c....如果是後面會用到的向量建議用np

b = np.asarray([1,2,3])
c = np.asarray([4,5,6])

因為丟進Learning的function有時候會直的接  有時候是橫接 有時候會打開

這時候可以善用concatenate  舉例:

a = np.array([[1, 2], [3, 4]])

b = np.array([[5, 6]])

np.concatenate((a, b), axis=0) # array([[1, 2],  [3, 4], [5, 6]])

np.concatenate((a, b.T), axis=1) # array([[1, 2, 5], [3, 4, 6]])

np.concatenate((a, b), axis=None) # array([1, 2, 3, 4, 5, 6])


--
看板 KoreanPop
作者 fleece (...)
標題 [問題] 請問一個叫O.S.T的歌手
時間 Fri Feb 19 12:25:09 2016


--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.141.208.43 (臺灣)
※ 文章代碼(AID): #1X-Nz4lL (Gossiping)
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1643740996.A.BD5.html
Refauth: 唉,都沒人推。1F 118.169.100.48 台灣 02/02 02:46
都在睡覺了XD
Qaaaa: 宅2F 85.83.228.116 丹麥 02/02 02:48
XD
newwu: res = [list % 2 == 0]  <<<看不懂這在寫啥3F 70.230.116.165 美國 02/02 02:49
我忘了這是np的語法糖
SSCSFE: 有C的背景不是應該寫for i in range(len(l4F 164.67.212.93 美國 02/02 02:49
ah937609: 不是沒人推 大家還在尻 等等才會上來5F 180.217.232.238 台灣 02/02 02:49
newwu: 把變數名稱取做list本身就大有問題6F 70.230.116.165 美國 02/02 02:50
SSCSFE: ist))嗎 for auto i : list我記得是C++197F 164.67.212.93 美國 02/02 02:50
SSCSFE: 東西 沒道理現在的學生學C++直接從C++19
Range-based for loop (since C++11) 還是蠻新  大部分上課還是C++98
SSCSFE: 下手9F 164.67.212.93 美國 02/02 02:51
newwu: 你再去查一下list comprehension的語法10F 70.230.116.165 美國 02/02 02:51
太久沒寫忘了 感謝提醒
SSCSFE: list % 2會有type error11F 164.67.212.93 美國 02/02 02:53
剛剛寫錯 改了
minipai: 推推12F 223.136.240.161 台灣 02/02 02:59
pumapupa: 是在找index為偶數吧?13F 114.24.247.116 台灣 02/02 03:00
剛剛沒認真看 感謝
※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:12:53
Rasin: 這個可以幹嘛14F 125.224.208.13 台灣 02/02 03:12
python就是行數很少  很多C/C++要寫很多行的東西 np語法糖很快就寫好
非常適合用py來驗poc 過了之後再重新刻成c/cpp
※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:16:07
KimWexler: Comprehension好像不單純是語法糖15F 172.92.178.210 美國 02/02 03:22
KimWexler: 以前寫leetcode發現速度真的有差
長知識了
※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:29:40
renna038766: Python為啥沒指標17F 1.171.66.212 台灣 02/02 03:31
就是py拉到抽象層次思考   先專注在演算法
到c才需要注意pointer這種memory位置的底層問題
※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:34:20
KimWexler: 我沒有往下深究 那只是觀察到的18F 172.92.178.210 美國 02/02 03:35
arrenwu: 以演算法的角度,List Comprehension19F 98.45.135.233 美國 02/02 03:35
arrenwu: 和 List.append() 一樣快就是了
寫法上能省盡量省XD
※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:36:54
arrenwu: 至於指標...不如說,現在常用的程式語言21F 98.45.135.233 美國 02/02 03:38
arrenwu: 有 指標 的很少了
go算常用嗎? go算是指標的概念

應該是說手稿語言已經很少管memory 比如js, raku, ruby, kotlin, racket....

先用手稿語言專注在演算法 把複雜度先做好

最後真的要榨乾要效能的話再回到處理效能的語言去調校
※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:44:11
kindaichitom: 這世紀發明的語言可能只有go有指標23F 220.137.243.66 台灣 02/02 03:44
XD
arrenwu: 我也覺得除非你是要處理效能瓶頸的人,24F 98.45.135.233 美國 02/02 03:44
※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:45:20
arrenwu: 不然先從開發時間短的語言開始比較務實25F 98.45.135.233 美國 02/02 03:45
真的 手稿語言讚
※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:46:00
saedn: 嗚嗚 沒人教好麻煩…26F 1.200.126.218 台灣 02/02 03:53
orze04: 學C是為了學基礎27F 122.116.39.42 台灣 02/02 04:00
ruokcnn: 寫python基本上就已經放棄追求效能ㄌ28F 111.83.157.143 台灣 02/02 04:09
rey123123: push29F 92.30.118.8 英國 02/02 04:28
nayeonmywife: 學C有很多好處 指標跟記憶體會比較30F 223.26.109.234 台灣 02/02 04:31
nayeonmywife: 清楚, 其他語言拿掉 結果還是在操
nayeonmywife: 作 pointer 使用 stack, heap
nayeonmywife: 只是讓寫程式的人表面上看不到而已
ctrlbreak: 如果最後都要轉成C 不如一開始就用C寫34F 220.132.129.68 台灣 02/02 05:03
deeeplove: 謝惹35F 39.8.65.188 台灣 02/02 05:33
tonyian: 都會用range了為何不 range (0,len(list36F 110.26.131.229 台灣 02/02 08:12
tonyian: ),2) 再list就好 ??????
RLH: 看不懂 哈哈哈38F 111.83.41.50 台灣 02/02 08:54
dixitdeus: 幹高手39F 71.230.161.115 美國 02/02 08:55
jackie955093: @.@40F 218.166.230.60 台灣 02/02 09:50
mastoid: 用py寫 再用cpython去轉就好了41F 39.10.10.218 台灣 02/02 09:53
mastoid: 不是寫mcu根本沒差那個記憶體效率
DiamondAse: 有學有推,我都寫第一種43F 27.53.120.6 台灣 02/02 10:07
philae1112: 推44F 49.217.193.102 台灣 02/02 10:25
PeikangShin: 白痴……一般人在製造業只要會vba和45F 111.82.1.170 台灣 02/02 11:37
PeikangShin: 樞紐能快速處理報表即可……搞這些
PeikangShin: 公司有自動化部門幫你搞定~雖然bug
PeikangShin: 一堆不如買外面套裝軟體
Rioronja: Python 讚讚讚49F 49.216.90.109 台灣 02/02 11:54
elliotpvt: 易讀性50F 1.200.121.43 台灣 02/02 12:37
adsl9527: 合理51F 180.217.48.175 台灣 02/02 17:04

--
※ 看板: Gossiping 文章推薦值: 0 目前人氣: 0 累積人氣: 120 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇