列表取值问题,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])

结果:
[2, 3, 4, 5]
[2, 4]
[]
  1. 第二个参数5,代表的也是索引么,如果是,就是截取到这个索引之前?可以这么理解么?
  2. 步长为2的时候可以取值,-2的时候为什么是空
  3. python列表这里索引取值,截取它的底层原理是什么,为什么会导致如上的结果


谢谢大家,已明白。代码可看已采纳的答案。
通俗易懂的话,就是 dodopy 的解释,贴下来:

明确几个信息:
1.列表的索引是从0开始
2.切片范围符合左闭右开原则
3.负数表示从右到左的顺序
4.step值默认为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个元素,取不到任何数据,即[]
print(arr[1:5:-2])
# 多举个例子
# 从右边第1个开始向左,开始向左,到右边第4个,依次取出每个元素及按序之后第2个元素,即[10, 8]
print(arr[-1:-5:-2]

阅读 4.5k
4 个回答
# 个人理解,写个类似的实现
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))

当然list切片底层使用c实现的,比我写的效率高得多

明确几个信息:
1.列表的索引是从0开始
2.切片范围符合左闭右开原则
3.负数表示从右到左的顺序
4.step值默认为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个元素,取不到任何数据,即[]
print(arr[1:5:-2])
# 多举个例子
# 从右边第1个开始向左,开始向左,到右边第4个,依次取出每个元素及按序之后第2个元素,即[10, 8]
print(arr[-1:-5:-2]

这是列表切片的操作
aa=[1,2,3,4,5,6]
aa[1:5:2]是指切片间隔为2的切片。
aa[1:5:-2]是指间隔为-2的切片。负数在反向切片的时候才能用,所以结果为空咯。
附上图片,自己敲敲看。

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏