回答

收藏

理解切片符号

技术问答 技术问答 200 人阅读 | 0 人回复 | 2023-09-11

我需要对 Python 切片符号解释得很好(参考文献是加分项)。
5 ?3 [0 K6 u4 M" b5 v对我来说,这个符号需要一点掌握。
9 M; i  k) I6 v( c+ M它看起来很强大,但我还没有完全理解它。  o5 L( p* V2 |+ C" m" }1 p& |  m
                                                               
7 X, U6 {1 B4 [) Q4 g* x    解决方案:                                                               
! Y" e; D4 N/ E! u# W                                                                真的很简单:
' X; h: k, M1 Ea[start:stop]  # items start through stop-1a[start:]      # items start through the rest of the arraya[:stop]       # items from the beginning through stop-1a[:]                    # a copy of the whole array还有一个step值,可与上述任何一个一起使用:
" s2 ^$ v$ Q3 G' u' {5 ga[start:stop:step] # start through not past stop,by step要记住的关键点是:stop值不是所选切片中的第一值。因此,两者之间的差异stop和start是选择的元素的数量(如果step是1,默认值)。$ ~2 J, s+ d: M
另一个特点是start或者stop这可能是一个负数,这意味着它从数组的末端而不是开始计数。# F1 F( C6 d' S( N, |
a[-1]    # last item in the arraya[-2:]   # last two items in the arraya[:-2]   # everything except the last two items同样,step可能是负:
1 @6 O3 x0 [3 |2 i3 n" A" _a[::-1]    # all items in the array,reverseda[1::-1]   # the first two items,reverseda[:-3:-1]  # the last two items,reverseda[-3::-1]  # everything except the last two items,reversed假如项目比你要求的少,Python 对程序员很友好。例如,如果你要求a[:-2]并且a只有一个元素,你会得到一个空列表而不是错误。有时你更喜欢错误,所以你必须意识到这可能会发生。" b6 _3 r: ^6 Q. F
与slice()对象关系! T, W! J. H; L$ D- N
切片操作符[]实际上是在上述代码中slice()使用:符号对象(仅在 内有效[]),即:
* ~3 w/ `4 @" p$ Q, Z$ Y, \a[start:stop:step]相当于:
  H/ ~# z: S" N: ]5 U! na[slice(start,stop,step)]切片对象的性能也略有不同,这取决于参数的数量range(),即两个slice(stop)和slice(start,stop[,step])支持。可以使用指定的给定参数。None,以便 ega[start:]等价于a[slice(start,None)]或a[::-1]等价于a[slice(None,None,-1)]。8 V* p; P5 y  O2 X. Y
虽然:基于-符号对简单的切片很有帮助,但是slice()对象的显式使用简化了切片的编程生成。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则