在列表中打印备用元素(引发IndexError:列表索引超出范围)

时间:2016-11-21 12:51:52

标签: python list python-3.x for-loop slice

如何在没有出现此错误的情况下打印列表中的所有其他项目?

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

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

有什么想法吗?

4 个答案:

答案 0 :(得分:9)

您可以使用列表的切片功能,即您可以将列表内容切片为:

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 元素上,您将尝试以 fruit [n] 的形式访问该项目,这将在您的列表持有时引发IndexError项目仅至 n-1 索引。

答案 1 :(得分:3)

如果您希望通过跳过每2个元素来迭代fruit,可以按以下步骤进行:

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

答案 2 :(得分: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']

答案 3 :(得分:0)

您的代码在打印声明中有轻微错误:

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

输出:

Strawberry
pear
banana
tomato