作者sbrhsieh (十年一梦)
看板Python
标题Re: [问题] 如何比较list里面各项数字的大小并重组?
时间Wed Jul 31 19:56:37 2013
※ 引述《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
1F:推 timTan:仔细一看,问的两个问题的确是太像了。 07/31 20:52
2F:→ timTan:大家都要再加油~ 07/31 20:52
3F:→ ck574b027:不过的确忘记说明那叫list comprehension 07/31 20:57
4F:→ sbrhsieh:他在前一个问题也没问,以为他自己可以找到相关资讯 07/31 21:38
5F:→ sbrhsieh:大概原作者太害羞,不敢多问 07/31 21:39
6F:→ Microscft:python愈来愈多新手是好事 看看隔壁的perl... 08/01 09:09