亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么不這么寫呢?感覺還簡單些


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
  • 參與學習       758392    人
  • 解答問題       8967    個

學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序

進入課程

為什么不這么寫呢?感覺還簡單些

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號