10

我刚刚遇到以下让我有点困惑的python代码:

 res = self.result[::-1].encode('hex')

编码的东西很清楚,它应该表示为十六进制值。但是,这个 self.result[::-1] 是什么意思,尤其是冒号?

4

2 回答 2

15

它代表从结果中获取的“切片”。第一个元素是起始位置,第二个是结束(不包括),第三个是步骤。冒号之前/之后的空值表示您从开头 ( s[:3]) 开始或延伸到结尾 ( s[3:])。您也可以在此处包含实际数字,但尽可能将它们排除在外更为惯用。

例如:

In [1]: s = 'abcdefg'

返回从开头开始并在索引位置 2 处停止的字符串切片:

In [2]: s[:3]
Out[2]: 'abc'

返回从第三个索引位置开始并延伸到末尾的字符串切片:

In [3]: s[3:]
Out[3]: 'defg'

返回从末尾开始并一次后退一个元素的字符串切片:

In [4]: s[::-1]
Out[4]: 'gfedcba'

返回包含所有其他元素的字符串切片:

In [5]: s[::2]
Out[5]: 'aceg'

它们也可以相互结合使用。在这里,我们返回一个切片,该切片返回从索引位置 6 开始到索引位置 2 的所有其他元素(请注意,s[:2:-2]这会更惯用,但我选择了奇怪数量的字母 :)):

In [6]: s[6:2:-2]
Out[6]: 'ge'

step 元素确定要返回的元素。在您的示例中,-1表示它将在项目中后退一步,一次一个元素。

于 2012-11-13T17:16:37.350 回答
2

这是颠倒列表的常见习语。

a = ['a', 'b', 'c', 'd']
b = a[::-1]
print b

['d', 'c', 'b', 'a']

您可以在此处阅读有关“扩展切片”的信息。

于 2012-11-13T17:17:14.230 回答