所以我有对象时
[*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]]
答案 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]