python - python 列表切片功能真的不对称吗?

标签 python arrays list slice symmetry

考虑以下代码:

>>> a = [0, 1, 2]
>>> for i in range(len(a)):
>>>   print a[0:i]

[]
[0]
[0, 1]

但是,当我翻转代码以从列表的另一端获取切片时,它不再有效:

>>> for i in range(len(a)):
>>>   print a[-i:]

[0, 1, 2]
[2]
[1, 2]

使第二段代码工作的唯一方法似乎是反转列表,按照第一种方式进行,并在打印之前反转每一段。有一个更好的方法吗?我有时会使用这种类型的循环,我希望我的代码尽可能干净。

编辑:在两个循环中,我都是从左到右迭代。如果我也为第二个循环翻转迭代方向,它就会起作用。如果我翻转第一个循环的迭代方向,它也有与第二个循环相同的问题:

>>> for i in range(len(a)):
>>>   print a[i-1::-1]

[2, 1, 0]
[0]
[1, 0]

最佳答案

第一次迭代,您将切片为 -0,这与从 0 切片相同。只有第二次迭代,您将切片为 -1,然后是 -2

也许您可以使用从负索引开始的范围:

for i in range(-len(a), 0):
    print a[-i:]

关于python - python 列表切片功能真的不对称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15593104/

相关文章:

python - 确定句子的主题

c# - 获得 List<object> 之间差异的最快方法

python - Python 中的静态类变量——列表和对象

java - 如何复制和过滤 ImmutableList<?在 Java 中扩展 MyObject>

python - 在 Python 中,如何判断模块是否来自 C 扩展?

python - 在Python中修改特定索引处的多维数组

python - 获取 HTML 代码的结构

javascript - 使用 angularjs 将键分配给数组

javascript - 如何根据动态变化的文本来操作节点? (进入/退出/更新)

套接字上下文中的 Java 和二进制数据