例如,Numpy允许多维切片:
a[:, 0, 7:9]
这就提出了一个问题:还有什么可能?(想象一下可能性!)在
根据this answer和一些实验(见下文),如果存在逗号,Python将构建一个对象元组,其中一些可能是切片对象,并将其(作为key
)传递给a
的{
documentation for ^{
首先,Python发现可以识别多切片的内容:
^{3}$有些事情是不允许的(SyntaxError):
# Semicolon delimiter
t['a':5; 'b':7:-7]
# Slice within a slice
t['a':7:(9:5),]
# Two trailing commas
t[5,,]
# Isolated comma
t[,]
# Leading comma
t[,5]
# Empty string
t[]
# Triple colon
t[:::]
# Ellipses as part of a slice
t[1:...]
t[1:2:...]
# Ellipses inside no-op parens:
t[(...)]
# Any non-zero and non-three number of dots:
t[.]
t[..]
t[ . . . . ]
任何都是可能的,只要它是有效的Python表达式。由
[...]
之间的表达式生成的对象传递给__getitem__
方法。就这样。在逗号产生元组,表达式中的
:
冒号产生slice()
对象。除此之外,你想用什么都行。在这是因为语法允许符号中的任何
expression_list
。参见reference documentation:切片在Slicings section中进一步指定:
所以再次允许任意的
expression
,并且:
触发proper_slice
语法规则。在请注意,
lower_bound
、upper_bound
和stride
表达式结果用于构造slice()
对象,该对象只能处理整数值。任何不能转换为整数的内容都将导致TypeError
被引发。这与语法错误不是一回事;t[1:...]
在语法上很好,但是...
不可转换为整数,因此会出现运行时TypeError
异常。至少在python2.4及更高版本上,使用非整数切片值的两个示例是不可能的。在你的实际语法错误都源于无效的表达式。除了
:
proper_slice
符号之外,如果不能将[...]
之间的部分放在赋值的右侧,也不能在切片中使用它。在例如,
;
只能用于将多个simple statements放在一条逻辑线上。语句可以包含表达式,但表达式永远不能包含语句,表达式中不包括;
。(9:5),
不是一个有效的表达式(Python中没有其他地方可以在括号中使用:
,而{a4}不允许任何这样的选项)。在Python 2 grammar for slicings要更详细一些,因为}在python2中是一个语法错误,而在python3中则不是。在
...
是语法中的一个特定符号,而且实际上不能在slicing之外使用...
(在python3中,可以在表达式有效的任何地方使用...
),这就是为什么{相关问题 更多 >
编程相关推荐