【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])

结果:

[2, 3, 4, 5]

[2, 4]

[]

  1. 第二个参数5,代表的也是索引么,如果是,就是截取到这个索引之前?可以这么理解么?
  2. 步长为2的时候可以取值,-2的时候为什么是空
  3. python列表" title="python列表">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]

回答

# 个人理解,写个类似的实现

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]

step为负数时,应该是start 大于 end,
其他的理解的都对。
https://stackoverflow.com/que...

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

【Python】列表取值问题,python

以上是 【Python】列表取值问题,python 的全部内容, 来源链接: utcz.com/a/78963.html

回到顶部