列表和字符串

List and Strings

我是 Python 的新手。你能帮我解释一下吗:

>>> list2 = [1, 2, 3]
>>> print(list2[1:-1])
[2]
>>> print(str(list2)[1:-1])
1, 2, 3

为什么list转成string后切片结果不一样?

字符串也是可以切片的可迭代对象:

>>> "abcde"[1:-1]
'bcd'

而列表的字符串表示就是列表的元素,用逗号分隔,用括号括起来:

>>> str(list2)
'[1, 2, 3]'

因此,当您删除 可迭代字符串 "[1, 2, 3]" 中的第一个和最后一个条目时,您会得到字符串 "1, 2, 3"(不是,因为它当你 print 时会出现,列表):

>>> str(list2)[1:-1]
'1, 2, 3'

请记住,在 Python 中,您可以使用负数索引从 last 条目开始工作在第一个可迭代对象中,所以 [1:-1] 等同于 [1:len(iterable) - 1]。也就是说,从 second 到倒数第二个

的每个元素

切片适用于您正在切片的序列中的各个元素,返回一个与您切片的类型相同的包含所选元素的新对象。

您的列表包含整数,切片会生成一个包含所选整数的新列表。一个字符串包含 个字符 ,因此对一个字符串进行切片会生成一个包含所选字符的新字符串。

您的列表仅包含 3 个元素(整数 123),而您的字符串包含更多元素,即字符 '[''1'' '(一个space)、','(一个逗号)、'2'' '','等。 , 一直到最后的 ']' 。请注意,这些元素不是整数,, 字符没有特殊含义,space 也算作字符。该字符串总共包含9个字符。

因此,当您对列表进行切片并删除第一个和最后一个元素时,只剩下一个元素,即整数 2。但是对字符串进行切片会删除 '['(第一个字符)和 ']',留下剩余的字符串 '1, 2, 3',总共 7 个字符。

如果让解释器回显这些对象(而不是使用 print())可能会更清楚:

>>> list2 = [1, 2, 3]
>>> list2
[1, 2, 3]
>>> len(list2)
3
>>> str(list2)
'[1, 2, 3]'
>>> len(str(list2))
9
>>> list2[1:-1]
[2]
>>> len(list2[1:-1])
1
>>> str(list2)[1:-1]
'1, 2, 3'
>>> len(str(list2)[1:-1])
7

请注意字符串对象周围的 ' 引号。

[1:-1]表示从第一个元素切片到倒数第二个元素。直接切片list2时,去掉了第一个和最后一个元素(1和3),剩下的就是中间的元素[2].

在python中,字符串也被认为是可迭代的;每个字符都可以被认为是一个元素。 list2 的字符串形式是 '[1, 2, 3]'。因此,当您删除第一个和最后一个字符(左括号和右括号)时,您将留下子字符串 '1, 2, 3'.