2016-11-21 29 views
-3

如何在列表中打印列表中的其他项目而不给予此错误?在列表中打印备选元素(引发IndexError:列表索引超出范围)

我很困惑,我已经以百万种不同的方式尝试过一百万次,但答案相同。 我的代码现在:

item = 0 
fruit = ['Strawberry','apple','pear','orange','banana','cucumber','tomato','Kiwi'] 
for count in fruit: 
    print(fruit[item]) 
    item = item + 2 

任何想法?

+2

这不是一个'免费调试我的代码'服务。请描述您在调试代码时所做的观察。 –

回答

8

您可以使用切片列表的功能,也就是说,用户可以切片列表的内容为:

your_list[start:end:step] 

这简单的话将创建一个新的列表:

  • 从指数开始start
  • upto index end
  • 步骤step

欲了解更多信息,请阅读:Python's slice notation

在你的情况,你可以遍历用2步切片列表你不需要指数为指针,以你的列表,你会for为你做。您的代码看起来就像这样:

>>> fruit = ['Strawberry','apple','pear','orange','banana','cucumber','tomato','Kiwi'] 
>>> 
>>> for f in fruit[::2]: 
...  print f 
... 
Strawberry 
pear 
banana 
tomato 

这里fruit[::2]存放值:

['Strawberry', 'pear', 'banana', 'tomato'] 

编辑:原因为您的代码的失败,你遍历整个列表我们假设它的长度为n。但是您正在访问两次项目的当前位置索引。当你将N/2个元素,你会尝试访问项目作为水果[N],这将提高IndexError为您的名单持有项目仅高达N-1个指数。

0

有在你的代码稍有不慎在打印statment:

item = 0 
fruit = ['Strawberry','apple','pear','orange','banana','cucumber','tomato','Kiwi'] 
for item in fruit[0::2]: 
    print(item) 

输出:

Strawberry 
pear 
banana 
tomato 
2

如果你想跳过每2个元素遍历fruit,您可以继续像如下:

for item in fruit[::2]: 
    print(item) 
1

你的代码不起作用的原因是因为

for count in fruit: 

迭代所fruit列表中的每个项目,所以一旦你在中途点,item将指向超出了列表的末尾。这是你代码的修改版本来说明:

item = 0 
fruit = ['Strawberry', 'apple', 'pear', 'orange', 'banana', 'cucumber', 'tomato', 'Kiwi'] 
print(len(fruit)) 
for v in fruit: 
    print(v, item) 
    item = item + 2 

输出

8 
Strawberry 0 
apple 2 
pear 4 
orange 6 
banana 8 
cucumber 10 
tomato 12 
Kiwi 14 

那么一旦我们达到“香蕉”,fruit[item]会尝试访问超出fruit结束一个项目,那引发了一个IndexError异常。


正如其他人所提到的,通常的方式做在Python这个任务是使用扩展切片:如果你想在奇品

fruit = ['Strawberry', 'apple', 'pear', 'orange', 'banana', 'cucumber', 'tomato', 'Kiwi'] 

for v in fruit[::2]: 
    print(v) 

输出

Strawberry 
pear 
banana 
tomato 

,您可以从1开始切片:

for v in fruit[1::2]: 
    print(v) 

输出

apple 
orange 
cucumber 
Kiwi 

或者你也可以只打印片,原样,因为它只是一个列表:

print(fruit[::2]) 

输出

['Strawberry', 'pear', 'banana', 'tomato'] 
相关问题