linying002 发表于 2024-1-24 17:00:54

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

21讲中的例子
s =
s =
print(s)


22讲中的例子
s =
s =
print(s)


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

FishC 发表于 2024-1-24 17:01:27

s = 和 s= 的赋值区别在于等号的左边是否有空格。s = 表示将右边的值赋给变量 s,而 s= 表示将右边的值赋给变量名为 "s=" 的变量。因为没有空格,所以它们被视为一个整体,不会被解释器识别为赋值语句。

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-1-24 17:38:59

s =
s =          # 元素 s 也就是 2 会被新的元素 取代,s 变成 , 3 , 4 , 5]
s = # s 切到的是 s 最后 2 个元素,也就是 ,执行此句会以
                         # 替换 ,执行此句后,s 会变成 , 2 , 3 , 2 , 1]

linying002 发表于 2024-1-25 10:19:32

jackz007 发表于 2024-1-24 17:38


那么s =
s =          #就是s 切到1和2 两个元素,就是 s =
但小甲鱼的解释是s 相当于指定下标为 1 的元素(结束位置是不包含的),所以 s = 相当于删除 s,然后在该位置加塞 。
这不就和你的解释矛盾了吗?

linying002 发表于 2024-1-25 10:31:36

FishC 发表于 2024-1-24 17:01
s = 和 s= 的赋值区别在于等号的左边是否有空格。s = 表示将右边的值赋给变量 s,而 s= 表示将右边的值赋给 ...

为什么越解释越晕,更看不懂了。 先说等号的问题,a = 和 a= 打印a的结果都是2,3,4,5。没有区别的呀。
我的问题是s 即 切到的是 s 最后 2 个元素,也就是s,s = 也就是s=,打印s, 结果是1,2,3,2,1。包含了结束位置的元素。
而,22讲中的s 相当于指定下标为 1 的元素,结束位置是不包含的。为社么同样切片,一个就包含结束元素,一个就不包含结束元素了呢?

FishC 发表于 2024-1-25 10:33:14

linying002 发表于 2024-01-25 10:31
为什么越解释越晕,更看不懂了。 先说等号的问题,a = ...

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

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

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-1-25 10:41:58

本帖最后由 jackz007 于 2024-1-25 10:46 编辑

linying002 发表于 2024-1-25 10:19
那么s =
s =          #就是s 切到1和2 两个元素,就是 s =
但小甲 ...

      不矛盾,是你的理解有误,s 并不包括索引为 2 的元素,其实就是 s,也就是元素 2,那么,s 同理也只是 s,也就是元素 3
         s = 就是用新元素 替换掉老元素 s(就是 2)。

pigbamboo 发表于 2024-1-26 01:29:27

本帖最后由 pigbamboo 于 2024-1-26 01:40 编辑

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


另外试下删除列表元素:
s =
del s
print(s)



个人觉得这种是python创了一个不同切片用法,毕竟用起来更灵活,不用纠结,直接记住就行

smallwh 发表于 2024-2-8 20:17:35

以a = ['a','b','c','d','e']为例
索引 : 0   1234

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

len(a)-2 在本例子中为3,对应元素'd',即倒数第二个
页: [1]
查看完整版本: s[1] =[6,6] 和 s[lens(s)-2:]=[2,1]的赋值区别是什么?