【问题标题】:Why the last value indexing in tuple or list give different class and slicing give different in python?为什么元组或列表中的最后一个值索引给出不同的类而切片在python中给出不同的?
【发布时间】:2020-10-18 20:00:45
【问题描述】:

例如 如果

a=(1,[2,3])

然后索引

b=a[1]

会给类list (因为索引值是list)

[2, 3] <class 'list'>

但在切片时

c=a[1:]

给类tuple

([2, 3],) <class 'tuple'>

谁能解释为什么会这样? 在确定类方面,Python 如何区分索引和切片?

提前谢谢你。

【问题讨论】:

  • c=a[1:] 返回元组的一部分,无论包含什么。如果在对序列进行切片时,切片返回底层对象类型,那将是一团糟!

标签: python python-3.x indexing tuples slice


【解决方案1】:

索引为您提供序列中的特定项目,而切片返回其中的一个片段,即使该片段是一个元素长。

【讨论】:

  • 但它对课堂有何影响?
  • 因为 a[1:] 是一个只有一个元素的元组(恰好是一个列表)。当您编制索引时,您只获得了元素。我建议在元组中尝试不同的数据类型。 @wwii:谢谢,我知道我的措辞有问题。 :)
【解决方案2】:

元组由许多支持索引和切片操作的任意对象/异构项组成。

以下总是会给你一个元组:

t = tuple()

t[start:stop]
t[start:]
t[:stop]
t[:]

如果您将使用 indices 来访问 tuple 中的对象,例如 t[0]t[-1],那么不同索引的类型会有所不同,具体取决于该特定索引上的内容。

【讨论】:

    【解决方案3】:

    切片返回序列的切片(即相同类型),而索引返回该索引处的项目。比较:

    >>> t = [1, 2, 3]
    >>> t[1:]  # Slice -> list
    [2, 3]
    >>> t[1]  # Index -> int
    2
    

    【讨论】:

      猜你喜欢
      • 2020-08-09
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      相关资源
      最近更新 更多