鱼C论坛

 找回密码
 立即注册
查看: 1204|回复: 6

[已解决]列表步长的问题

[复制链接]
发表于 2020-4-1 15:31:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.什么是步长?

2.下面这个列表中的两个“:”的作用我不太理解,为什么可以空一个数字打印呢?

>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list1[-3:-1]
[9, 7]
>>> list1[::2]
[1, 2, 7]
>>> list1[::-2]
[8, 9, 3]
>>>

谢谢!
最佳答案
2020-4-1 15:39:29
list可以指定三个参数
list[start:stop:step]
start指定开始的索引位置,空着表示从头开始索引
stop结束的索引位置,空着表示索引到最后
step步长,设置了就按你设置的步长来步进
>>> list1=[1,2,3,4,5,6]
>>> list1[::1]
[1, 2, 3, 4, 5, 6]
>>> list1[::2]
[1, 3, 5]
>>> list1[1::2]
[2, 4, 6]
>>> list1[1:5:2]
[2, 4]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-1 15:37:27 | 显示全部楼层
list1[::-2] 相当于list1[None : None : 2]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-1 15:39:29 | 显示全部楼层    本楼为最佳答案   
list可以指定三个参数
list[start:stop:step]
start指定开始的索引位置,空着表示从头开始索引
stop结束的索引位置,空着表示索引到最后
step步长,设置了就按你设置的步长来步进
>>> list1=[1,2,3,4,5,6]
>>> list1[::1]
[1, 2, 3, 4, 5, 6]
>>> list1[::2]
[1, 3, 5]
>>> list1[1::2]
[2, 4, 6]
>>> list1[1:5:2]
[2, 4]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-1 15:45:05 | 显示全部楼层
本帖最后由 sunrise085 于 2020-4-1 15:46 编辑

list的下标有两种方式
第一种从前向后:以0 开始,0,1,2,3……
第二种从后向前:一-1开始,……-3,-2,-1
例如:
list1  =  [1,  3,  2,  9,  7,  8]
正下标: 0 , 1,  2,  3,  4,  5
负下标:-6, -5, -4, -3, -2, -1

1、步长就是每次跨过几个,例如:list1 = [1, 3, 2, 9, 7, 8],步长为2 切片的话,得到的就是[1,2,7]越过了 3,9, 8
2、list1[m:n:l]   其中m是切片的起始位置,默认为0,n是切片的终止位置(不含)默认为结尾,l是步长,默认为1
三个值都可以使用默认值,省略步长l的时候,可以不写第二个冒号,但是若需要自定义步长l,则前面的两个冒号都要写
全部切片则是list1[:]
list1[::2]就是从list1的全部元素中进行切片,步长为2,步长是正数,从下标为0 的元素开始切片,得到的是[1,2,7]
list1[::-2]就是从list1的全部元素中进行切片,步长为-2,步长是负数,从下标为-1 的元素开始切片,得到的是[8,9,3]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-1 15:46:48 | 显示全部楼层
本帖最后由 dlnb526 于 2020-4-1 15:49 编辑

您好,步长就是设定一个常值指定两个元素之间的间隔。就像是人走路走出一步的距离相同。

第二个问题需要认真学习切片部分。
 L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
你一定知道下面代码的结果
>>> L[0:3]
['Michael', 'Sarah', 'Tracy']

可以通过切片轻松取出某一段数列。如果换一个列表进行选取,比如列表里是0-99,
L = range(100)

那么前10个数:
>>> L[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
后10个数:
>>> L[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

也可以通过L[90:]实现,也就是说索引可以是负数

前10个数,每两个取一个:

>>> L[:10:2]
[0, 2, 4, 6, 8]

这里2就是步长。

所有数,每5个取一个:
>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
甚至什么都不写,只写[:]就可以原样复制一个list:
>>> L[:]
[0, 1, 2, 3, ..., 99]
试试上面几个例子,希望对你有所帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-1 17:21:32 | 显示全部楼层


没那么标准哈,
Y($1WH0(RR1I9G@9WA9LF61.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-1 17:31:14 | 显示全部楼层
1. 步长就是跳几步取一个元素。

2. 切片的格式是 list[start : stop : step],start、stop、step 都可以省略。

    如果省略,start 为 0,stop 为列表的长度。
    所以 list1[::2] 相当于 list1[0:6:2](因为 list1 的长度是 2),跳 2 步取一个元素:

    [1, 3, 2, 9, 7, 8]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 19:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表