【发布时间】:2015-08-24 20:08:24
【问题描述】:
我一直在寻找关于以下内容“幕后”发生的事情的简洁解释,但到目前为止还没有运气。
为什么,当您尝试以下操作时:
mylist = ["a","b","c","d"]
for index, item in mylist:
print item
我得到这个错误:
ValueError: need more than 1 value to unpack
但是当我尝试时:
for item in mylist:
print item
这是返回的:
a
b
c
d
如果索引是列表结构的一部分,为什么我不能将它们与项目一起打印出来?
我知道解决方案是使用enumerate(),但我很好奇为什么遍历列表(不使用enumerate())会以这种方式工作并返回ValueError。
我想我不明白的是:如果您可以通过使用它们的索引在列表中找到项目(例如 item = L[index] 的情况) - 这是否意味着某个级别,索引是固有的作为数据结构的列表的一部分?或者item = L[index] 真的只是一种让 Python 使用索引计算列表中项目的方法(显然从 0 开始)?换句话说,item = L[index] 正在将索引“应用”到列表中的项目,从 0 开始。
【问题讨论】:
-
enumerate返回tuple的生成器(index, value)。所以你正在解包每个元组。当您尝试解压缩mylist时,没有索引,它认为您正在尝试将列表的每个元素解压缩到您的两个变量index和item中。由于每个项目都是长度为 1 的字符串,因此抱怨您无法将一个字符解压缩为两个变量 -
如果可行,为什么需要枚举?
-
@Malvin9000,OP 在问为什么我的代码不做与我使用 enumerate 时发生的事情相同的事情,而我不这样做这意味着如果它这样做了,你就不需要 enumerate 这没什么意义
-
@GillBates,是的,你基本上是在问,如果你能做你想做的事,为什么要枚举存在?在任何文档中哪里说索引是列表结构的一部分?
标签: python list indexing iteration