为什么不这么写呢?感觉还简单些
L = ['Adam', 'Lisa', 'Bart', 'Paul'] for index, name in zip(range(1,5),L): print index, '-', name
L = ['Adam', 'Lisa', 'Bart', 'Paul'] for index, name in zip(range(1,5),L): print index, '-', name
2016-04-19
正好在看 Python的91个建议, 其中前两个建议 就是 理解 Pythonic 概念 和 编写 Pythonic 代码。
早餐吃完,今天也没有工作安排。。。 那我就在 题主这个问题下 多多多多多多多的 啰嗦下吧!!
首先什么是 Pythonic? 直接翻译来就是 Python理念,Python风格。 呃。。。 到这里依然还是废话, 那么什么又是 Python理念, Python风格呢? 书中是引用 Tim Peters 的 《The Zen of Python》(Python 之禅) 中所说:
1 . 美胜丑,显胜隐,简胜杂,杂胜乱,平胜陡,疏胜密。 (这怪怪的翻译。。)
2 . 找到简单问题的一个方法,最好是唯一的方法(正确的解决之道)。 (道。。。逼格高有没有。。)
3 . 难以解释的实现,源自不好的注意;如有非常棒的主意,他的实现肯定易于解释。
至此Pythonic 概念安利完毕。。 (再次跳出,如果安利公司倒闭后,多年后的读者看到这儿会不会费解。。)
然后什么是Pythonic 代码? Python 命名规范什么的我就不说了, 这里只说我个人最喜欢的一点:
充分理解并使用 Python 内置数据类型,内置函数,标准库
好了,代码说明。。。(回答问题时有本书在身边,确实好,抄了这么多废话 才到代码,想想以往。。上来就是代码):
L = [1,2,3,4,5] ## 非 Pythonic 代码 length = len(L) i=0 while i < length: do_sth_with(L[i]) i+=1 ## Pythonic 代码 for i in L: do_sth_with(i) ## 解释,充分利用了 Python 中关键字 in 和 iterable类型(list,tuple,dict,set 等等)的特性。 ## 这也可以算作我们上面所说的 Pythonic 第2点: 正确且唯一的方法!
## 换一块代码,呼应 充分理解,使用 Python 内置函数(BIF: buit-in function) ## 稍微修改下 题主的代码, 以提高适应性,如下: L = ['Adam', 'Lisa', 'Bart', 'Paul'] for index, name in zip(range(len(L)),L): print index+1, '-', name ## 此处用index +1 来达到 题主想要从1开始的目的 ## 这就是没有充分 使用 Python 的内置函数 enumerate(), 首先题主目的是打印列表的 index(index+1) ## 和对应的元素, 这个在Python的BIF中就有一个专门做这个得,题主没有使用。 ##课程中也有,代码如下: L = ['Adam', 'Lisa', 'Bart', 'Paul'] for index, name in enumerate(L,1): print index, '-', name ## 我们对比下两个代码的最大不同: 第二行的 in 后面的那段: enumerate(L) ## Pythonic zip(range(len(L)),L) ## 非 Pythonic ## 解释, 其实能看出来肯定是第一个更简单,大多数人之所以不愿意用,究其原因 无非就是 这个英文单词 ## enumerate 相对来说 不熟, 其实就这么一个单词真的是不难,为什么大多数人 望而却步,退而求自己相对 ## 较为熟悉的 zip, range, len 等单词简单,逻辑复杂的解法呢(我擦好长的宾语。。。)? 难道单单就因为 ## 一个单词? 我猜不是, 我觉得是(我要开始胡诌啦!!) 我们缺少主义的大旗!! 此时我祭出 ## Pythonic主义, 大家是不是觉得 enumerate 也没有那么 面目可憎了。。 哈哈
好吧, 就到这儿吧, 只是一个课程问答, 分分钟就会被埋没在 后来者的提问中。。 我也是闲。。
哦, 还有个 enumerate 的中文翻译 "枚举" , 是不是还有些音译的感觉。 这个翻译真不错,难道也是 日本传过来的, 现代汉语反倒被日语反哺 。。 呃 又跑题了。。 算了到这儿吧,拿快递去了。
举报