python数组包含切片索引

时间:2016-08-30 23:00:43

标签: python arrays numpy

我希望编写一个打印数组尾部的for循环,包括整个数组(用i == 0表示)这个任务是否可行,没有分支逻辑,即{{循环中的1}}语句?

如果存在使用包含端索引进行切片的语法,则可以执行此操作。

if i==0

输出:

arr=[0,1,2,3,4,5]
for i in range(0,3):
    print arr[:-i]

想要输出:

[]
[0, 1, 2, 3, 4]
[0, 1, 2, 3]

4 个答案:

答案 0 :(得分:9)

您可以使用None

arr=[0,1,2,3,4,5]
for i in range(0,3):
    print arr[:-i or None]

答案 1 :(得分:5)

for i in xrange(0, 3):
    print arr[:(len(arr) - i)]
# Output
# [0, 1, 2, 3, 4, 5]
# [0, 1, 2, 3, 4]
# [0, 1, 2, 3]

答案 2 :(得分:2)

这种尴尬来自于试图利用:-n语法。由于:0:-0之间没有区别,我们无法使用此语法将0 from the start0 from the end区分开来。

在这种情况下,使用:i索引更清晰,并相应地调整range

In [307]: for i in range(len(arr),0,-1): print(arr[:i])
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4]
[0, 1, 2, 3]
[0, 1, 2]
[0, 1]
[0]

arr[:None]表示0 from the end,通常就足够了。

请注意,arr[:i]会转换为arr.__getitem__(slice(None,i,None)):语法是slice对象的简写。 slice签名是:

slice(stop)
slice(start, stop[, step])

slice本身非常简单。它是__getitem__方法赋予它意义。从理论上讲,您可以将list作为子类,并为其提供一个自定义__getitem__,将slice(None,0,None)视为slice(None,None,None)

答案 3 :(得分:1)

有一个大脑冻结,但这样做:

arr=[0,1,2,3,4,5]
for i in range(0,3):
    print arr[:len(arr)-i]

虽然我仍然希望python有更好的语法来完成这些简单的任务。