理解中的下标元组解包符号

时间:2018-04-29 23:49:40

标签: python syntax

所以我有对象时

[*range(4)]
[*zip([1, 2, 3], [4, 5, 6])]

并使用tuple-unpacking,有没有办法下标tuple-unpacking表示法,如下所示:

[*range(4)[2]]
[*[2]zip([1, 2, 3], [4, 5, 6])]

不使用下标整体理解?

[[*range(4)][2]]
[[*zip([1, 2, 3], [4, 5, 6])][2]]

1 个答案:

答案 0 :(得分:3)

不,你不能对解包操作进行切片。

但是有各种可行的解决方法:

  • 如果您要拆包的可迭代文件可以切片,只需将其直接切片即可。例如,要获取range的第3个元素:

    >>> [*range(4)[2:3]]
    [2]
    

    那么为什么我们在这里使用[2:3]?这很简单:range(4)[2]将返回一个整数,并且无法解压缩整数:

    >>> [*range(4)[2]]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'int' object is not iterable
    

    range(4)[2:3]返回单个元素列表,因此解包成功。

  • 如果无法对iterable进行切片,请使用itertools.islice对其进行切片:

    >>> [*itertools.islice(zip([1, 2, 3], [4, 5, 6]), 2, 3)]
    [(3, 6)]
    
  • 如果您只想要一个可切片迭代的单个元素,那么根本不要解压缩迭代:

    >>> [range(4)[2]]
    [2]