Re: [問題] 如何比較list裡面各項數字的大小並重組?

看板Python作者 (十年一夢)時間12年前 (2013/07/31 11:56), 編輯推噓1(105)
留言6則, 4人參與, 最新討論串2/5 (看更多)
※ 引述《nissekl (METALLICA-JAMES)》之銘言: : 標題: [問題] 如何比較list裡面各項數字的大小並重組? : 時間: Wed Jul 31 16:02:10 2013 : : 不好意思小弟不材又要來打擾各位神手大大了 : : 因為最近一直在用list來寫東西, 所以都是問有關list的問題 : 我現在出現的問題: : : s = [10.0, 31.0, 25.0, 77.0, 66.0] : t = [7.0, 42.0, 45.0, 49.0, 60.0] : : 我想讓這兩個list的每一個相對的元素去比大小 : 然後比較小的值去組成一個新的list : : 例如:10 和 7比較 7比較小 7留下 : 31 和 42比較 31比較小 31留下 : ....已此類推 : 最後會組成新的list u : : u = [7.0, 31.0, 25.0, 49.0, 60.0] : : 請問要達到這個目的要怎麼寫呢? : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.114.95.170 : → sbrhsieh:感覺你都沒有認真去想。 07/31 16:10 : → sbrhsieh:u=[a if a < b else b for a, b in zip(s, t)] 07/31 16:11 : → nissekl:非常感謝你....因為我開始碰python不到兩週.我會的東西 07/31 16:36 : → nissekl:真的很少...加上我先前真的沒學過什麼程式語言... 07/31 16:37 : → nissekl:python 算我第一個碰的語言..所以很多東西真的完全不知道 07/31 16:38 : → nissekl:怎用...像連一樓寫給我的式子..我也是這兩天第一次見到 07/31 16:40 : → nissekl:我的參考書think python的list章節沒出現過==|| 07/31 16:42 : → nissekl:真的很不好意思<(_ _)> 07/31 16:43 : → os653:新手不要用那種寫法,用最通用的寫法就好了 07/31 17:30 : → os653:s = [10.0, 31.0, 25.0, 77.0, 66.0] 07/31 17:34 : → os653:t = [7.0, 42.0, 45.0, 49.0, 60.0] 07/31 17:34 : → os653:u = [None, None, None, None, None] 07/31 17:34 : → os653:for i in range(len(s)): 07/31 17:34 : → os653: if s[i] < t[i]: 07/31 17:34 : → os653: u[i] = s[i] 07/31 17:34 : → os653: else: 07/31 17:34 : → os653: u[i] = t[i] 07/31 17:35 : → os653:一樓那種寫法等寫久了自然就會去用了,又快又方便 07/31 17:36 : → sbrhsieh:那寫C就好了 07/31 18:07 : → darkgerm:一樓不要這麼兇~ 每個人總有剛開始學的時候^^ 07/31 19:24 : → darkgerm:我建意原 PO 問問題時講一下你曾做過的嘗試 07/31 19:25 : → darkgerm:不要讓人覺得你是什麼都沒想過就來求答案 07/31 19:25 抱歉,我沒有責怪的意思或是要引戰。 我只是從原作者發過的帖子嗅到一點態度或學習方式上面似乎不太對的味道。 假如原作者只是想要完成手上被交付的工作,隨便挑了 Python 來做,只想交差 了事的話,那最好的方式就是找(交)一位懂 Python 的朋友,你告訴他需求,由 他幫你寫 code 來解決。 如果你希望 Python 成為你的一部分,那麼你在上一篇獲得你滿意的答覆時(就是 你說了聲謝謝了),你就應該是自己去讀過並搞懂 list comprehension 的部分。 如果你先搞懂了 for statement(+ tuple unpacking) 與內建的 zip function, 那麼搞懂 list comprehension 與消化前一篇回覆你的做法應不成問題。 真沒有辦法理解的話,你可以在文中提出你沒有搞懂的部分,待有心人與你進一步 討論。那麼就不會有再發問這一篇,然後得到一個非常相近的答案。 我提到的做法是有用到 2.5 才加入的 conditional expression,在不懂這個 的情況下,若你真的弄懂前一篇給你的寫法,好歹也要能自己拼出這樣的做法( 先不管效率上的考量): u = [(b, a)[a < b] for a, b in zip(s, t)] 推文部分,我口氣是不太好,我做錯了。 我想表達我的意見是不管是不是初學 Python(programming)都不應該排斥像 list comprehension 這種算是 Python 的特性之一的部分,至少我覺得這種東西 並不像 Ruby 中一些黑魔法般的寫法來得矯情,它並不深奧到可學可不學的地步, 反而是每一個 Python programmer 都很熟悉的東西,常用會話的一部分。 使用 list comprehension 不單單只是 code 比較短,對多數的 Python programmer 來說它的語意是比較清楚,比起一大段類 C code,在可讀性上也比較好。 這有點像講「我哥」比講「我父母的另一個年紀比我大的兒子」來得好讀,雖然 你必須要再學習「哥哥」的定義。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.164.104.144

07/31 20:52, , 1F
仔細一看,問的兩個問題的確是太像了。
07/31 20:52, 1F

07/31 20:52, , 2F
大家都要再加油~
07/31 20:52, 2F

07/31 20:57, , 3F
不過的確忘記說明那叫list comprehension
07/31 20:57, 3F

07/31 21:38, , 4F
他在前一個問題也沒問,以為他自己可以找到相關資訊
07/31 21:38, 4F

07/31 21:39, , 5F
大概原作者太害羞,不敢多問
07/31 21:39, 5F

08/01 09:09, , 6F
python愈來愈多新手是好事 看看隔壁的perl...
08/01 09:09, 6F
文章代碼(AID): #1H-FjuKM (Python)
討論串 (同標題文章)
文章代碼(AID): #1H-FjuKM (Python)