鱼C论坛

 找回密码
 立即注册
查看: 2613|回复: 8

请问谁能解释这种列表切片的用法

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

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

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

x
本帖最后由 wbzxz 于 2023-2-20 21:12 编辑

在学习python列表过程中,有些问题解释不了,请指点。

第一种情况
s = [1, 2, 3, 4, 5] 

s[3:] = [7] 
 [1, 2, 3, 7] 

s[3:1] = [7] 
 [1, 2, 3, 7, 7] 

s[3:2] = [7] 
 [1, 2, 3, 7, 7, 7] 

s[3:3] = [7] 
 [1, 2, 3, 7, 7, 7, 7] 

s[3:4] = [7] 
 [1, 2, 3, 7, 7, 7, 7] 

s[3:5] = [7] 
 [1, 2, 3, 7, 7, 7] 

s[3:6] = [7] 
 [1, 2, 3, 7] 


第二种情况
s = [1, 2, 3, 4, 5] 

s[3:] = [7, 8] 
 [1, 2, 3, 7, 8] 

s[3:1] = [7, 8] 
 [1, 2, 3, 7, 8, 7, 8] 

s[3:2] = [7, 8] 
 [1, 2, 3, 7, 8, 7, 8, 7, 8] 

s[3:3] = [7, 8] 
 [1, 2, 3, 7, 8, 7, 8, 7, 8, 7, 8] 

s[3:4] = [7, 8] 
 [1, 2, 3, 7, 8, 8, 7, 8, 7, 8, 7, 8] 

s[3:5] = [7, 8] 
 [1, 2, 3, 7, 8, 8, 7, 8, 7, 8, 7, 8] 

s[3:6] = [7, 8] 
 [1, 2, 3, 7, 8, 7, 8, 7, 8, 7, 8] 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-20 21:13:08 | 显示全部楼层
本帖最后由 sfqxx 于 2023-2-20 21:22 编辑

完整切片函数有三个参数:word [ 开始的索引号:结束的索引号:步长]
只有二个参数的切片函数: word [ 开始的索引号:结束的索引号]  (默认步长为1)
只有一个参数的切片函数: word [ 开始的索引号:]   或 word [ :结束的索引号]
例子:
>>> word='我的中国心'
>>> word[0:5:2]
'我中心'
>>> word[0:2]
'我的'
>>> word[2:5]
'中国心'
>>> word[:2]
'我的'
>>> word[2:]
'中国心'

s[3:=7,8]就是把第4个元素第5个元素分别改成7,8

有用设置最佳答案谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-20 21:43:41 | 显示全部楼层

这是对 Python 列表切片(slicing)操作的一系列示例,具体每个操作的含义和结果如下:
第一种情况:

s[3:] = [7]:将列表 s 中从索引 3 开始(包括索引 3)的元素替换为 [7],即将原来的 [4, 5] 替换为 [7],最终结果为 [1, 2, 3, 7]。

s[3:1] = [7]:将列表 s 中从索引 3 到索引 1(不包括索引 1)的元素替换为 [7],即将原来的 [] 替换为 [7],最终结果为 [1, 2, 3, 7, 7]。

s[3:2] = [7]:将列表 s 中从索引 3 到索引 2(不包括索引 2)的元素替换为 [7],即将原来的 [] 替换为 [7],最终结果为 [1, 2, 3, 7, 7, 7]。

s[3:3] = [7]:将列表 s 中从索引 3 到索引 3(不包括索引 3)的元素替换为 [7],即将原来的 [] 替换为 [7],最终结果为 [1, 2, 3, 7, 7, 7, 7]。

s[3:4] = [7]:将列表 s 中从索引 3 到索引 4(不包括索引 4)的元素替换为 [7],即将原来的 [4] 替换为 [7],最终结果为 [1, 2, 3, 7, 7, 7, 7]。

s[3:5] = [7]:将列表 s 中从索引 3 到索引 5(不包括索引 5)的元素替换为 [7],即将原来的 [4, 5] 替换为 [7],最终结果为 [1, 2, 3, 7, 7, 7]。

s[3:6] = [7]:将列表 s 中从索引 3 到索引 6(不包括索引 6)的元素替换为 [7],即将原来的 [4, 5] 替换为 [7],最终结果为 [1, 2, 3, 7]。

第二种情况:
s[3:] = [7, 8]:将列表 s 中下标为 3 及其之后的元素替换为 [7, 8],因此原来的 [4, 5] 被删除了,s 变成了 [1, 2, 3, 7, 8]。
s[3:1] = [7, 8]:将列表 s 中下标为 3 到 1 之间的元素(不包括 1)替换为 [7, 8],由于切片的左右下标是反向的,因此实际上相当于在下标为 1 的位置插入了 [7, 8],s 变成了 [1, 2, 3, 7, 8, 7, 8]。
s[3:2] = [7, 8]:将列表 s 中下标为 3 到 2 之间的元素(不包括 2)替换为 [7, 8],同样相当于在下标为 2 的位置插入了 [7, 8],s 变成了 [1, 2, 3, 7, 8, 7, 8, 7, 8]。
s[3:3] = [7, 8]:将列表 s 中下标为 3 到 3 之间的元素替换为 [7, 8],这实际上是在下标为 3 的位置插入了 [7, 8],s 变成了 [1, 2, 3, 7, 8, 7, 8, 7, 8, 7, 8]。
s[3:4] = [7, 8]:将列表 s 中下标为 3 到 4 之间的元素替换为 [7, 8],由于这个区间只有一个元素 4,因此 s 变成了 [1, 2, 3, 7, 8, 8, 7, 8, 7, 8, 7, 8]。
s[3:5] = [7, 8]:将列表 s 中下标为 3 到 5 之间的元素替换为 [7, 8],因此原来的 [4, 5] 被替换为 [7, 8],s 变成了 [1, 2, 3, 7, 8, 7, 8]。
s[3:6] = [7, 8]:将列表 s 中下标为 3 到 6 之间的元素替换为 [7, 8],这个结果是不正确的。Python中的切片赋值操作 s[i:j] = lst 会将 s 中下标从 i 到 j-1 的元素替换成 lst 中的元素,替换后 s 的长度可能会发生变化,但是 lst 的长度不会改变。在这个例子中,s[3:6] = [7, 8] 的含义是将 s 中下标从 3 到 5 的元素替换成 [7, 8],也就是将 4, 5 替换成 7, 8。因此,正确的结果是:

s = [1, 2, 3, 4, 5]
s[3:6] = [7, 8]
print(s) # [1, 2, 3, 7, 8]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-20 22:43:22 | 显示全部楼层
列表切片是一种用于获取列表的子集的方法,通常的语法是list[start:end:step],其中start是切片的起始位置(包含),end是切片的结束位置(不包含),step是切片的步长。下面是一些常用的用法:

list[start:end]:从start到end-1的子列表
list[:end]:从开头到end-1的子列表
list[start:]:从start到结尾的子列表
list[:]:列表的完整副本
list[start:end:step]:从start到end-1的每隔step个元素的子列表
例如,假设有一个列表my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我们可以使用以下切片来获取不同的子列表:

my_list[2:6]:获取包含元素2、3、4、5的子列表[2, 3, 4, 5]
my_list[:5]:获取包含元素0、1、2、3、4的子列表[0, 1, 2, 3, 4]
my_list[5:]:获取包含元素5、6、7、8、9的子列表[5, 6, 7, 8, 9]
my_list[::2]:获取包含元素0、2、4、6、8的子列表[0, 2, 4, 6, 8]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-20 23:49:57 | 显示全部楼层
bluesky5210 发表于 2023-2-20 21:43
这是对 Python 列表切片(slicing)操作的一系列示例,具体每个操作的含义和结果如下:
第一种情况:

...

s[3:1] = [7]:将列表 s 中从索引 3 到索引 1(不包括索引 1)的元素替换为 [7],即将原来的 [] 替换为 [7],最终结果为 [1, 2, 3, 7, 7]。

谢谢您,请问为什么是2个7呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-22 20:36:47 | 显示全部楼层
bluesky5210 发表于 2023-2-20 21:43
这是对 Python 列表切片(slicing)操作的一系列示例,具体每个操作的含义和结果如下:
第一种情况:

...

谢谢您,我消化消化啊,非常感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-22 21:11:23 | 显示全部楼层
wbzxz 发表于 2023-2-22 20:36
谢谢您,我消化消化啊,非常感谢。

请将解决问题的楼层设为最佳答案,不然一直挂着求助中,会覆盖真正需要帮助的帖子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-22 21:11:27 | 显示全部楼层
wbzxz 发表于 2023-2-22 20:36
谢谢您,我消化消化啊,非常感谢。

请将解决问题的楼层设为最佳答案,不然一直挂着求助中,会覆盖真正需要帮助的帖子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-23 09:21:03 | 显示全部楼层
期待高手解答。list[start:end:step]:从start到end-1的每隔step个元素的子列表,没有step参数就是默认是1,但通常是end索引数字会比start大,这里出现的end索引小,怎么计算,期待高手能回答。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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