在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ 列表取值問題,python

列表取值問題,python

有個小白問題,代碼如下:

arr = [1,2,3,4,5,6,7,8,9,10]

print(arr[1:5])
print(arr[1:5:2])
print(arr[1:5:-2])

結(jié)果:
[2, 3, 4, 5]
[2, 4]
[]
  1. 第二個參數(shù)5,代表的也是索引么,如果是,就是截取到這個索引之前?可以這么理解么?
  2. 步長為2的時候可以取值,-2的時候為什么是空
  3. python列表這里索引取值,截取它的底層原理是什么,為什么會導(dǎo)致如上的結(jié)果


謝謝大家,已明白。代碼可看已采納的答案。
通俗易懂的話,就是 dodopy 的解釋,貼下來:

明確幾個信息:
1.列表的索引是從0開始
2.切片范圍符合左閉右開原則
3.負(fù)數(shù)表示從右到左的順序
4.step值默認(rèn)為1

arr = [1,2,3,4,5,6,7,8,9,10]
# 從第2個(index為1)開始向右,到第4個,依次取出每個元素及按序之后第1個元素,即[2,3,4,5]
print(arr[1:5])
# 從第2個(index為1)開始向右,到第4個,依次取出每個元素及按序之后第2個元素,即[2,4]
print(arr[1:5:2])
# 從第2個(index為1)開始向左,到第4個,依次取出每個元素及按序之后第2個元素,取不到任何數(shù)據(jù),即[]
print(arr[1:5:-2])
# 多舉個例子
# 從右邊第1個開始向左,開始向左,到右邊第4個,依次取出每個元素及按序之后第2個元素,即[10, 8]
print(arr[-1:-5:-2]

回答
編輯回答
傲寒

step為負(fù)數(shù)時,應(yīng)該是start 大于 end,
其他的理解的都對。
https://stackoverflow.com/que...

2018年3月5日 13:26
編輯回答
葬愛

明確幾個信息:
1.列表的索引是從0開始
2.切片范圍符合左閉右開原則
3.負(fù)數(shù)表示從右到左的順序
4.step值默認(rèn)為1

arr = [1,2,3,4,5,6,7,8,9,10]
# 從第2個(index為1)開始向右,到第4個,依次取出每個元素及按序之后第1個元素,即[2,3,4,5]
print(arr[1:5])
# 從第2個(index為1)開始向右,到第4個,依次取出每個元素及按序之后第2個元素,即[2,4]
print(arr[1:5:2])
# 從第2個(index為1)開始向左,到第4個,依次取出每個元素及按序之后第2個元素,取不到任何數(shù)據(jù),即[]
print(arr[1:5:-2])
# 多舉個例子
# 從右邊第1個開始向左,開始向左,到右邊第4個,依次取出每個元素及按序之后第2個元素,即[10, 8]
print(arr[-1:-5:-2]
2018年6月28日 11:41
編輯回答
裸橙

這是列表切片的操作
aa=[1,2,3,4,5,6]
aa[1:5:2]是指切片間隔為2的切片。
aa[1:5:-2]是指間隔為-2的切片。負(fù)數(shù)在反向切片的時候才能用,所以結(jié)果為空咯。
附上圖片,自己敲敲看。

clipboard.png

2017年8月4日 15:35
編輯回答
陪她鬧
# 個人理解,寫個類似的實現(xiàn)
def index(l, start=None, end=None, step=1):
    result = []
    if step == 0:
        # raise 報錯
        return
    elif step > 0:
        if start is None: start = 0
        if end is None: end = len(l)
        while start < end:
            result.append(l[start])
            start += step
    else:
        if start is None: start = len(l) - 1
        if end is None: end = -1
        while start > end:
            result.append(l[start])
            start += step
    return result
    
    
l = list(range(10))
print(l[::2], index(l, step=2))
print(l[::-2], index(l, step=-2))
print(l[:5:2], index(l, end=5, step=2))
print(l[:6:-3], index(l, end=6, step=-3))
print(l[6::2], index(l, start=6, step=2))
print(l[2::-2], index(l, start=2, step=-2))
print(l[2:7], index(l, start=2, end=7))
print(l[7:2:-1], index(l, start=7, end=2, step=-1))

當(dāng)然list切片底層使用c實現(xiàn)的,比我寫的效率高得多

2017年3月15日 11:17