我希望编写一个打印数组尾部的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]
答案 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 start
与0 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有更好的语法来完成这些简单的任务。