2017-04-19 95 views
0
pizzas = ["hawai","salame","vegetable","capriciosa","new york"] 
for pizza in pizzas: 
    print("I like " + pizza.title() + " pizza!") 
print("\n" + "The first three pizzas in the list are: " + str(pizzas[0:3])) 
print("\n" + "The last three pizzas in the list are: " + str(pizzas[-1:-3])) 

最后三个项目的列表中,我得到:打印在Python

I like Hawai pizza! 
I like Salame pizza! 
I like Vegetable pizza! 
I like Capriciosa pizza! 
I like New York pizza! 

The first three pizzas in the list are: ['hawai', 'salame', 'vegetable'] 

The last three pizzas in the list are: [] 

,我很困惑。是不是-1表示列表中的最后一个元素?我索引[start:stop]所以不应该打印我的最后3个项目?我究竟做错了什么 ?

+5

你需要的是'比萨饼[ -3:]' – JBernardo

回答

4

您应该使用pizzas[-3:]来代替,以便您的start是列表末尾的第三个元素,而您的end是列表的最后一个。

pizzas = ["hawai","salame","vegetable","capriciosa","new york"] 

for pizza in pizzas: 
    print("I like " + pizza.title() + " pizza!") 

print("\nThe first three pizzas in the list are: " + str(pizzas[:3])) 
print("\nThe last three pizzas in the list are: " + str(pizzas[-3:])) 
+0

谢谢你们俩。有没有特定的原因,为什么它不按我写的方式工作? – adam86

+2

是;如果你从索引'-1'开始并以'-3'结尾,你的'start'值实际上比'end'更大(在字符串的后面)。切片时,“开始”应该总是小于“结束”。另一个问题是,即使颠倒这两个指数,并使用'披萨[-3:-1]',以'-1'结尾,实际上不会包含最后一项。 “开始”索引是“包含”,而“结束”是“独占”。幸运的是,Python有一个直到列表最后的简写,这只是在切片时省略“end”参数。你可以用'start'做同样的事情,并且默认为零。 – gyre

3

默认步骤是1,所以从-1到-3,步骤为1返回空片。你可以明确地指示步骤为-1,但这种反转项目的顺序:

>>> pizzas[-1:-3:-1] 
['new york', 'capriciosa'] # -3 excluded 

但是,要获得最后三个项目,你要的是pizza[-3:]

+0

真棒:)这回答我的两个问题!谢谢。 – adam86