PTT評價

Re: [問卦] 初學Python是不是養成一堆壞習慣?

看板Gossiping標題Re: [問卦] 初學Python是不是養成一堆壞習慣?作者
Ommm5566
(56天團)
時間推噓24 推:25 噓:1 →:26

※ 引述《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])


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

--

※ PTT 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.141.208.43 (臺灣)
PTT 網址

Refauth 02/02 02:46唉,都沒人推。

都在睡覺了XD

Qaaaa 02/02 02:48

XD

newwu 02/02 02:49res = [list % 2 == 0] <<<看不懂這在寫啥

我忘了這是np的語法糖

SSCSFE 02/02 02:49有C的背景不是應該寫for i in range(len(l

ah937609 02/02 02:49不是沒人推 大家還在尻 等等才會上來

newwu 02/02 02:50把變數名稱取做list本身就大有問題

SSCSFE 02/02 02:50ist))嗎 for auto i : list我記得是C++19

SSCSFE 02/02 02:50東西 沒道理現在的學生學C++直接從C++19

Range-based for loop (since C++11) 還是蠻新 大部分上課還是C++98

SSCSFE 02/02 02:51下手

newwu 02/02 02:51你再去查一下list comprehension的語法

太久沒寫忘了 感謝提醒

SSCSFE 02/02 02:53list % 2會有type error

剛剛寫錯 改了

minipai 02/02 02:59推推

pumapupa 02/02 03:00是在找index為偶數吧?

剛剛沒認真看 感謝

※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:12:53

Rasin 02/02 03:12這個可以幹嘛

python就是行數很少 很多C/C++要寫很多行的東西 np語法糖很快就寫好 非常適合用py來驗poc 過了之後再重新刻成c/cpp

※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:16:07

KimWexler 02/02 03:22Comprehension好像不單純是語法糖

KimWexler 02/02 03:22以前寫leetcode發現速度真的有差

長知識了

※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:29:40

renna038766 02/02 03:31Python為啥沒指標

就是py拉到抽象層次思考 先專注在演算法 到c才需要注意pointer這種memory位置的底層問題

※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:34:20

KimWexler 02/02 03:35我沒有往下深究 那只是觀察到的

arrenwu 02/02 03:35以演算法的角度,List Comprehension

arrenwu 02/02 03:35和 List.append() 一樣快就是了

寫法上能省盡量省XD

※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:36:54

arrenwu 02/02 03:38至於指標...不如說,現在常用的程式語言

arrenwu 02/02 03:38有 指標 的很少了

go算常用嗎? go算是指標的概念 應該是說手稿語言已經很少管memory 比如js, raku, ruby, kotlin, racket.... 先用手稿語言專注在演算法 把複雜度先做好 最後真的要榨乾要效能的話再回到處理效能的語言去調校

※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:44:11

kindaichitom 02/02 03:44這世紀發明的語言可能只有go有指標

XD

arrenwu 02/02 03:44我也覺得除非你是要處理效能瓶頸的人,

※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:45:20

arrenwu 02/02 03:45不然先從開發時間短的語言開始比較務實

真的 手稿語言讚

※ 編輯: Ommm5566 (223.141.208.43 臺灣), 02/02/2022 03:46:00

saedn 02/02 03:53嗚嗚 沒人教好麻煩…

orze04 02/02 04:00學C是為了學基礎

ruokcnn 02/02 04:09寫python基本上就已經放棄追求效能ㄌ

rey123123 02/02 04:28push

nayeonmywife 02/02 04:31學C有很多好處 指標跟記憶體會比較

nayeonmywife 02/02 04:31清楚, 其他語言拿掉 結果還是在操

nayeonmywife 02/02 04:32作 pointer 使用 stack, heap

nayeonmywife 02/02 04:33只是讓寫程式的人表面上看不到而已

ctrlbreak 02/02 05:03如果最後都要轉成C 不如一開始就用C寫

deeeplove 02/02 05:33謝惹

tonyian 02/02 08:12都會用range了為何不 range (0,len(list

tonyian 02/02 08:12),2) 再list就好 ??????

RLH 02/02 08:54看不懂 哈哈哈

dixitdeus 02/02 08:55幹高手

jackie955093 02/02 09:50@[email protected]

mastoid 02/02 09:53用py寫 再用cpython去轉就好了

mastoid 02/02 09:53不是寫mcu根本沒差那個記憶體效率

DiamondAse 02/02 10:07有學有推,我都寫第一種

philae1112 02/02 10:25

PeikangShin 02/02 11:37白痴……一般人在製造業只要會vba和

PeikangShin 02/02 11:37樞紐能快速處理報表即可……搞這些

PeikangShin 02/02 11:37公司有自動化部門幫你搞定~雖然bug

PeikangShin 02/02 11:37一堆不如買外面套裝軟體

Rioronja 02/02 11:54Python 讚讚讚

elliotpvt 02/02 12:37易讀性

adsl9527 02/02 17:04合理

loveyou9527 02/15 21:54你很懂麻