我需要对 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()对象的显式使用简化了切片的编程生成。