【问题标题】:List and Strings列表和字符串
【发布时间】:2015-10-24 10:02:58
【问题描述】:

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

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

为什么列表改成字符串切片结果不一样?

【问题讨论】:

  • 你看过没有切片的字符串吗?

标签: python string list python-3.x slice


【解决方案1】:

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

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

您的列表仅包含 3 个元素(整数 123),您的字符串包含更多元素,即字符 '[''1'' '(一个空格)、','(逗号)、'2'' '','等,一直到最后的']'。请注意,这些元素不是整数,, 字符没有特殊含义,空格也算作字符。该字符串共包含 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

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

【讨论】:

    【解决方案2】:

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

    >>> "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】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-16
        • 2015-10-28
        • 1970-01-01
        • 1970-01-01
        • 2021-02-27
        相关资源
        最近更新 更多