課程
/后端開發
/Python
/初識Python
L=['Adam','Lisa','Bart','Paul']
>>>L[-4:-1:2] ? ? ? ? ? ? ? ? ? ? ? ? ------->這個沒理解
2016-04-07
源自:初識Python 8-2
正在回答
Adam, Lisa, Bart, Paul 用倒數表示的話其分別對應的序號為-4,-3,-2,-1。所以,L[-4:-1:2]的意思是從從Adam開始到Paul,每兩個取一個(即最后那個“:2”的意思),或隔一個取一個。如此其結果應該為Adam,Bart。
沒有理由退縮 提問者
羅格里格斯
粘貼自己的以前在猿問里的回答給 題主:
————————————————————分隔線————————————————————————
樓主問的是列表,及Python中所有可迭代類型類型的 切片問題, 由于我電腦上裝的是Python 3.x, 在 range() 這個內建函數上和淚珠的2.x 有些許差別:
2.x: range(start : stop : step) 生成 一個 從start開始(包含start)到stop結束(不包含stop),步長為 step 的列表(下稱:list類型)3.x range(start : stop : step) 生成一個 序列生成器(range 類型),在這里,range自成一種類型了, 不過 start, stop, step 的意義是一樣的。
2.x: range(start : stop : step) 生成 一個 從start開始(包含start)到stop結束(不包含stop),步長為 step 的列表(下稱:list類型)
3.x range(start : stop : step) 生成一個 序列生成器(range 類型),在這里,range自成一種類型了, 不過 start, stop, step 的意義是一樣的。
以上是兩個版本Python的區別,扯開一句,Python 3.x 和2.x 的不兼容在前幾年3.x 剛推出是 短時間內看對Python語言是一種傷害, 一種分裂。 但是站在2016的開端來看,各種常用的庫都已經支持了3.x, 且3.x版本比2.x 版本在 各個方面都高級和合理了很多,所以建議初學者都從3.x 開始學習Python. ?range 的在3.x的改進就能看出: 在2.x 中產生一個list , 而3.x 中產生的是一個 生成器,在內存優化上更高一層。?
好了扯遠了, 寫這些主要是為了說明 ?用3.x 演示代碼和2.x 的區別: 在3.x 中 如果想保證 開頭聲明的L 是list ,如下:? ?
L?=?list(range(1,101))
我們具體解釋下 range(start : stop : step) 中三個暫稱為 參數的作用和用法,以及一些小技巧:
1, start: 如上所說, 為列表(3.x 為 range 類型)的開始,?切片或者聲明時 可以省略,省略默認 start為0。
2, stop: ?列表的結束(不包含),?切片時可以省略,省略默認為列表的最后。
3, step: 為步長,即 列表中元素之間的差,?切片或者聲明時 可以省略, 默認為1。
下面就range函數的各種省略的組合用代碼 一一說明:
>>>?list(range(3))?##?聲明時?省略?start?和?step [0,?1,?2] ? >>>?list(range(1,3))?##?聲明時?省略?step [1,?2] ? >>>?list(range(1,11,2))??##?步長為2 [1,?3,?5,?7,?9] ? >>>?list(range(11,1,-2))?##?步長為負數 [11,?9,?7,?5,?3]
列表切片的start ?stop ?step 和 range函數 差不多:
>>>?L=?list(range(1,21))??##聲明?列表?L >>>?print?(L) [1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11,?12,?13,?14,?15,?16,?17,?18,?19,?20] ? >>>?print(L[2:6])?##?省略?step?(步長),?step默認為1 [3,?4,?5,?6] ? >>>?print(L[2:10:2])?##?顯式聲明?step?為2 [3,?5,?7,?9] ? >>>?print(L[10:2:-2])??##?顯式聲明?step?為?-2 [11,?9,?7,?5] ? >>>?print(L[:19])?##?省略?start,?start?默認為0;?省略步長?step,?默認為1 [1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11,?12,?13,?14,?15,?16,?17,?18,?19] ? >>>?print(L[0::1])?##?省略?stop?,?默認到列表的結尾。 [1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11,?12,?13,?14,?15,?16,?17,?18,?19,?20]
應該還有更多的寫法, ?3個位置: start, stop, step ; 且它們均可以為 正數 或負數。 題主可以自己試試。
舉報
學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-04-07
Adam, Lisa, Bart, Paul 用倒數表示的話其分別對應的序號為-4,-3,-2,-1。所以,L[-4:-1:2]的意思是從從Adam開始到Paul,每兩個取一個(即最后那個“:2”的意思),或隔一個取一個。如此其結果應該為Adam,Bart。
2016-04-07
粘貼自己的以前在猿問里的回答給 題主:
————————————————————分隔線————————————————————————
樓主問的是列表,及Python中所有可迭代類型類型的 切片問題, 由于我電腦上裝的是Python 3.x, 在 range() 這個內建函數上和淚珠的2.x 有些許差別:
以上是兩個版本Python的區別,扯開一句,Python 3.x 和2.x 的不兼容在前幾年3.x 剛推出是 短時間內看對Python語言是一種傷害, 一種分裂。 但是站在2016的開端來看,各種常用的庫都已經支持了3.x, 且3.x版本比2.x 版本在 各個方面都高級和合理了很多,所以建議初學者都從3.x 開始學習Python. ?range 的在3.x的改進就能看出: 在2.x 中產生一個list , 而3.x 中產生的是一個 生成器,在內存優化上更高一層。?
好了扯遠了, 寫這些主要是為了說明 ?用3.x 演示代碼和2.x 的區別: 在3.x 中 如果想保證 開頭聲明的L 是list ,如下:? ?
我們具體解釋下 range(start : stop : step) 中三個暫稱為 參數的作用和用法,以及一些小技巧:
1, start: 如上所說, 為列表(3.x 為 range 類型)的開始,?切片或者聲明時 可以省略,省略默認 start為0。
2, stop: ?列表的結束(不包含),?切片時可以省略,省略默認為列表的最后。
3, step: 為步長,即 列表中元素之間的差,?切片或者聲明時 可以省略, 默認為1。
下面就range函數的各種省略的組合用代碼 一一說明:
列表切片的start ?stop ?step 和 range函數 差不多:
應該還有更多的寫法, ?3個位置: start, stop, step ; 且它們均可以為 正數 或負數。 題主可以自己試試。