为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不这么写呢?感觉还简单些


L = ['Adam', 'Lisa', 'Bart', 'Paul']
for index, name in zip(range(1,5),L):
    print index, '-', name


正在回答

3 回答

哈哈哈,逗。

0 回复 有任何疑惑可以回复我~

正好在看 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 的中文翻译 "枚举" , 是不是还有些音译的感觉。 这个翻译真不错,难道也是 日本传过来的, 现代汉语反倒被日语反哺 。。 呃 又跑题了。。 算了到这儿吧,拿快递去了。

4 回复 有任何疑惑可以回复我~
#1

W_Qing

enumerate(L,1) 中1是什么意思?没有加1的话则时0,1,2,3排列L中元素,是列举加上1、还是从1开始排列。
2016-04-20 回复 有任何疑惑可以回复我~
#2

清波 回复 W_Qing

我怎么觉得你的疑问。。写个代码跑一下就能得到答案呢?或者还有别的?
2016-04-20 回复 有任何疑惑可以回复我~
#3

W_Qing 回复 清波

结果是从1开始排列,不明白这个函数内部怎么运转的。。如果知道内部运转方便记忆。
2016-04-21 回复 有任何疑惑可以回复我~
#4

慕容1501408

哈哈哈,逗
2017-09-13 回复 有任何疑惑可以回复我~
查看1条回复

题主是指

range(1, len(L)+1)

这句吗?这句主要是从代码可用性上考虑的,不然后换个list这个函数就不起作用了

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758623    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

为什么不这么写呢?感觉还简单些

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信