鱼C论坛

 找回密码
 立即注册
查看: 3026|回复: 10

[已解决]关于列表切片的问题

[复制链接]
发表于 2023-2-22 20:41:38 | 显示全部楼层 |阅读模式

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

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

x
请各位老师通过切片的方式解释下面这段代码是怎么一个过程?
>>> s = [1, 2, 3, 4, 5]
>>> s[3:1] = [7]
>>> print(s)
[1, 2, 3, 7, 4, 5]
最佳答案
2023-2-23 09:35:54
这段代码的含义如下:

首先创建一个列表 s,其中包含五个整数 [1, 2, 3, 4, 5]。

接下来,使用切片的方式,选取列表 s 中索引为 3 到索引为 1 之间(不包括索引为 1 的元素)的子列表。由于索引为 3 的元素是整数 4,索引为 1 的元素是整数 2,因此这个子列表为空,也就是 []。

然后,将子列表 [7] 赋值给这个空的子列表,也就是将整数 7 插入到列表 s 中索引为 3 的位置。

最后,使用 print 函数输出列表 s,结果为 [1, 2, 3, 7, 4, 5]。

因此,这段代码的效果是将整数 7 插入到列表 s 中索引为 3 的位置。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-22 21:09:43 | 显示全部楼层
是将列表第4个字符替换成7
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-22 21:38:53 | 显示全部楼层
本帖最后由 chinajz 于 2023-2-22 22:31 编辑

s[n:1] = [] 的意思是在s[n]前插入元组,n=0,1,...n-1
在4即s[3]前面插入[7]:
>>> s = [1, 2, 3, 4, 5]
>>> s[3]
4
>>> s[3:1] = [7]
>>> s
[1, 2, 3, 7, 4, 5]
如果在要s[1]即2前面插入[7,8]:
>>> s = [1, 2, 3, 4, 5]
>>> s[1]
2
>>> s[1:1] = [7,8]
>>> s
[1, 7, 8, 2, 3, 4, 5]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-22 21:48:32 | 显示全部楼层
本帖最后由 chinajz 于 2023-2-22 22:03 编辑

s[0]前面插入,将替换s[0]
>>> s = [0,1, 2, 3, 4, 5]
>>> s[0]
0
>>> s[0:1] = [7,8]
>>> s
[7, 8, 1, 2, 3, 4, 5]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-22 22:48:59 | 显示全部楼层
s[3:1]=s[3:2]=s[3:3]
后面的数字比前面的小时:表示插入的意思,就是插入到第3个后面
后面的数字比前面的大时:表示替换的意思。比如s[3:4]表示替换掉第三个后面的个元素,[3:5]表示替换掉第三个后面个元素

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-23 07:46:40 | 显示全部楼层
本帖最后由 chinajz 于 2023-2-23 07:53 编辑

其实都是替换并插入,s[n,x]中,n<=x时,结果为[];n>x时,将从n开始,向后替换n-x个元素。
>>> s = [1, 2, 3, 4, 5]
>>> s[3:2]
[]
>>> s[3:3]
[]
>>> s[3:4]
[4]
>>> s[3:4]=[7,8,9]
>>> s
[1, 2, 3, 7, 8, 9, 5]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-23 09:35:54 | 显示全部楼层    本楼为最佳答案   
这段代码的含义如下:

首先创建一个列表 s,其中包含五个整数 [1, 2, 3, 4, 5]。

接下来,使用切片的方式,选取列表 s 中索引为 3 到索引为 1 之间(不包括索引为 1 的元素)的子列表。由于索引为 3 的元素是整数 4,索引为 1 的元素是整数 2,因此这个子列表为空,也就是 []。

然后,将子列表 [7] 赋值给这个空的子列表,也就是将整数 7 插入到列表 s 中索引为 3 的位置。

最后,使用 print 函数输出列表 s,结果为 [1, 2, 3, 7, 4, 5]。

因此,这段代码的效果是将整数 7 插入到列表 s 中索引为 3 的位置。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-23 21:49:07 | 显示全部楼层
sfqxx 发表于 2023-2-22 21:09
是将列表第4个字符替换成7

感谢指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-23 22:14:27 | 显示全部楼层
本帖最后由 wbzxz 于 2023-2-23 22:18 编辑
chinajz 发表于 2023-2-22 21:38
s[n:1] = [] 的意思是在s[n]前插入元组,n=0,1,...n-1
在4即s[3]前面插入[7]:


谢谢您的指点,但我感觉还是有点不对,按照您的说法

s[n:1] = [] 的意思是在s[n]前插入元组,n=0,1,...n-1

s[0:1] = [7]  时,结果是在0前插入元组,是[7, 1,  2, 3, 4, 5]

而实际是:[7, 2, 3, 4, 5]

不好意思,看到了您的第二个解答,意思是s[0]要被替换掉的,这种情况属于特殊情况,是吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-23 22:24:08 | 显示全部楼层
未泯 发表于 2023-2-22 22:48
s[3:1]=s[3:2]=s[3:3]
后面的数字比前面的小时:表示插入的意思,就是插入到第3个后面
后面的数字比前面 ...

谢谢,应该是您说的规律。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-23 22:37:49 | 显示全部楼层
本帖最后由 未泯 于 2023-2-24 08:34 编辑
ouyunfu 发表于 2023-2-23 09:35
这段代码的含义如下:

首先创建一个列表 s,其中包含五个整数 [1, 2, 3, 4, 5]。

索引为 3 的元素是整数 4,索引为 1 的元素是整数 2,因此这个子列表为空,也就是 []


如果是这样的逻辑,那子列表就不为空,而是[3,2]

为啥没把[3,2]替换掉,只能是降序步长没定义的都默认为s[3:3]的空列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 13:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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