微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python用列表扩展切片:文档正确吗?

如何解决Python用列表扩展切片:文档正确吗?

| http://docs.python.org/reference/expressions.html#slicings上的文档说(带有一些摘录):   5.3.3。切片      切片选择序列对象中的一系列项目(例如,字符串,元组或列表)。
slicing          ::=  simple_slicing | extended_slicing
simple_slicing   ::=  primary \"[\" short_slice \"]\"
extended_slicing ::=  primary \"[\" slice_list \"]\"
slice_list       ::=  slice_item (\",\" slice_item)* [\",\"]
slice_item       ::=  expression | proper_slice | ellipsis
proper_slice     ::=  short_slice | long_slice
short_slice      ::=  [lower_bound] \":\" [upper_bound]
long_slice       ::=  short_slice \":\" [stride]
lower_bound      ::=  expression
upper_bound      ::=  expression
stride           ::=  expression
ellipsis         ::=  \"...\"
  简单切片的语义如下。主要对象必须评估为序列对象...      扩展切片的语义如下。主要对象必须评估为映射对象,... 问题: 为了支持
[1,2,3][a:b:c]
表示法,语言参考要求列表是映射对象((2ѭ仅带有\“ extended slicing \”,用于映射对象)。因此,该语言参考是否已损坏(可能是在引入Python2.3的新功能:扩展切片之后,他们只是忘了对其进行更新吗?)? 同样,切片显然不仅限于序列对象(请参见上面的第一个短语)。 还是只是我? ;) 附言 有趣的是,位于http://docs.python.org/release/3.1.3/reference/expressions.html#slicings的Python 3文档说:   切片选择序列对象中的一系列项目(例如,字符串,元组或   清单)...      [\“统一\”切片定义,此处不区分\“扩展\”和\“简单\”]      切片的语义如下。主要对象必须评估为映射对象,...     

解决方法

        有关映射的语言已损坏;在所有情况下都应说“顺序或映射”以匹配解释器的行为。两种协议都可以接受切片对象,并且解释器将在所有情况下进行转换。但是,对于内置类型,只有序列实际支持它:
 >>> a = {\'a\': 1,\'c\': 2}
 >>> a[\'a\':\'b\']
 Traceback (most recent call last):
   File \"<pyshell#32>\",line 1,in <module>
     a[\'a\':\'b\']
 TypeError: unhashable type: \'slice\'
请注意,这是词典中抱怨切片不是有效键,而不是解释器抱怨您无法在映射上进行切片。这是有道理的-字典没有隐含的键顺序,因此尚不清楚分片的含义。     ,        不幸的是,新增功能和langref使用了“扩展切片”的两个不同定义。这两个文档对于各自的定义都是正确的。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。