鱼C论坛

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

s[1] =[6,6] 和 s[lens(s)-2:]=[2,1]的赋值区别是什么?

[复制链接]
发表于 2024-1-24 17:00:54 | 显示全部楼层 |阅读模式

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

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

x
21讲中的例子
s = [1,2,3,4,5]
s[len(s)-2:] = [2,1]
print(s)
[1,2,3,2,1]

22讲中的例子
s = [1,2,3,4,5]
s[1:2] = [6,6]
print(s)
[1,6,6,3,4,5]

22讲中说s[1:2] 相当于指定下标为 1 的元素(结束位置是不包含的),所以 s[1:2] = [6, 6] 相当于删除 s[1],然后在该位置加塞 [6, 6]。
那为什么21讲中的s[len(s)-2:]指定倒数第二位元素就包含了结束位置的元素呢? 感觉矛盾了,不理解,求大神解答。

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2024-1-24 17:01:27 | 显示全部楼层
s = 和 s= 的赋值区别在于等号的左边是否有空格。s = 表示将右边的值赋给变量 s,而 s= 表示将右边的值赋给变量名为 "s=" 的变量。因为没有空格,所以它们被视为一个整体,不会被解释器识别为赋值语句。

在21讲的例子中,s = 后面没有赋值操作,所以打印结果为空。而在22讲的例子中,s = 后面的赋值操作具体看具体情况。

关于 s 相当于指定下标为1的元素的问题,可能存在一些误解。在Python中,使用 s = 的赋值操作并不是删除 s ,再在该位置加入新元素,而是直接将新元素覆盖原来位置上的元素。所以在22讲的例子中,s[1] = 是用于替换 s 中下标为1的元素的。而在21讲的例子中,并没有指定具体的下标,所以默认赋值给了整个字符串 s,即相当于替换整个字符串。

希望能够解答您的疑问!如有更多问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-24 17:38:59 | 显示全部楼层
s = [1,2,3,4,5]
s[1] = [6 , 6]           # 元素 s[1] 也就是 2 会被新的元素 [6 , 6] 取代,s 变成 [1 , [6 , 6] , 3 , 4 , 5]
s[len(s)-2 :] = [2 , 1]  # s[len(s) - 2 : ] 切到的是 s 最后 2 个元素,也就是 [4 , 5],执行此句会以
                         # [2 , 1] 替换 [4 , 5],执行此句后,s 会变成 [1 , [6 , 6] , 2 , 3 , 2 , 1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-1-25 10:19:32 | 显示全部楼层

那么s = [1,2,3,4,5]
s[1:2] = [6,6]         #就是s 切到1和2 两个元素,就是 s[2,3] = [6,6]
但小甲鱼的解释是s[1:2] 相当于指定下标为 1 的元素(结束位置是不包含的),所以 s[1:2] = [6, 6] 相当于删除 s[1],然后在该位置加塞 [6, 6]。
这不就和你的解释矛盾了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-25 10:31:36 | 显示全部楼层
FishC 发表于 2024-1-24 17:01
s = 和 s= 的赋值区别在于等号的左边是否有空格。s = 表示将右边的值赋给变量 s,而 s= 表示将右边的值赋给 ...

为什么越解释越晕,更看不懂了。 先说等号的问题,a = [2,3,4,5]  和 a= [2,3,4,5] 打印a的结果都是2,3,4,5。没有区别的呀。
我的问题是s[len(s)-2:] 即 切到的是 s 最后 2 个元素,也就是s[3:4],s[len(s)-2:] = [2,1] 也就是s[3:4]=[2,1],打印s, 结果是1,2,3,2,1。包含了结束位置的元素。
而,22讲中的s[1:2] 相当于指定下标为 1 的元素,结束位置是不包含的。为社么同样切片,一个就包含结束元素,一个就不包含结束元素了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-25 10:33:14 | 显示全部楼层
linying002 发表于 2024-01-25 10:31
为什么越解释越晕,更看不懂了。 先说等号的问题,a = ...


非常抱歉,可能在之前的回答中有些不准确或者误导性的表述,给您带来困惑。让我重新为您解释一下。

首先,关于等号的问题,a = 和 a= 写法确实是等效的,在打印结果上并没有区别。这是因为Python对于等号的处理比较灵活,可以容忍一些语法上的变化。但是,通常推荐使用 a = 的写法,因为它更符合Python的代码风格和可读性。

其次,关于切片的问题,理解起来确实有些绕。当我们使用切片操作时,开始位置和结束位置都是相对于原字符串的索引,并且在切片过程中,结束位置的元素是不包含在内的。所以在22讲的例子中,s[1:] 表示从索引1开始(即第二个元素),直到字符串末尾的所有元素,不包括末尾的元素。而在21讲的例子中,s 表示整个字符串,而不是切片,所以将整个字符串打印出来。

至于为什么同样的切片操作,一个包含结束元素,一个不包含结束元素,这可能是因为在不同的版本或环境下,解释器对于切片操作的具体规则可能有所差异。但是根据Python的官方文档中关于切片操作的定义和约定,结束位置元素是不包含在切片结果中的。

希望这次的解释能够帮助您理解,如果还有疑问或者需要进一步的解释,请随时提问。非常感谢您的耐心和理解!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-25 10:41:58 | 显示全部楼层
本帖最后由 jackz007 于 2024-1-25 10:46 编辑
linying002 发表于 2024-1-25 10:19
那么s = [1,2,3,4,5]
s[1:2] = [6,6]         #就是s 切到1和2 两个元素,就是 s[2,3] = [6,6]
但小甲 ...


        不矛盾,是你的理解有误,s[1:2] 并不包括索引为 2 的元素,其实就是 s[1],也就是元素 2,那么,s[2:3] 同理也只是 s[2],也就是元素 3
         s[1:2] = [6,6] 就是用新元素 [6,6] 替换掉老元素 s[1](就是 2)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-26 01:29:27 From FishC Mobile | 显示全部楼层
本帖最后由 pigbamboo 于 2024-1-26 01:40 编辑

我觉得是
22讲中按楼主理解
21讲这种s[n:] =[1,2]的切片该理解为下标为n位置与后面的所有元素都被替换成[1, 2], 换了个下标亲测有效:
s = [1,2,3,4,5]
s[2:] = [1,2]
print(s)
[1,2,1,2]

另外试下删除列表[2:]元素:
s = [1,2,3,4,5]
del s[2:]
print(s)
[1,2]


个人觉得这种是python创了一个不同切片用法,毕竟用起来更灵活,不用纠结,直接记住就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-8 20:17:35 | 显示全部楼层
以a = ['a','b','c','d','e']为例
索引 : 0   1  2  3  4

切片语法有默认值,即 a[::] 相当于 a[0:len(a):1]
>>> a = ['a','b','c','d','e']
>>> a[0:len(a):1]
['a', 'b', 'c', 'd', 'e']
len(a)即列表的长度(本例子中是5),而'e'的索引是4,此时 a[0:len(a):1] 表示从索引为0(即'a')开始到索引为5的元素(不包含)。
也就是取到 0,1,2,3,4 即整个列表。
如果你输入 a[len(a)] 会报错的,这说明了 python 切片中结束位置 默认值是已经超出列表的 , 但取不到又被舍去了

len(a)-2 在本例子中为3,对应元素'd',即倒数第二个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 14:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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