理解python for循环,使用对象作为索引?

理解python for循环,使用对象作为索引?,python,for-loop,enumerate,Python,For Loop,Enumerate,下面是我编写的一些测试代码 class myclass: def __init__(self, aty): self.number = 0; self.anitype = aty; l = []; l.append(myclass("tiger")) l.append(myclass("lion")) l.append(myclass("puma")) l.append(myclass("jagur")) # Method 1 : of course

下面是我编写的一些测试代码

class myclass:
    def __init__(self, aty):
        self.number = 0;
        self.anitype = aty;

l = [];
l.append(myclass("tiger"))
l.append(myclass("lion"))
l.append(myclass("puma"))
l.append(myclass("jagur"))

# Method 1 : of course this doesn't work, but I saw a case where it works
#for idx in l: l[idx].number = idx

# Method 2 : of course this works
for idx, lst in enumerate(l):
   l[idx].number = idx

for idx, lst in enumerate(l):
    print("%d : %s" % (lst.number, lst.anitype))
结果是:

0 : tiger
1 : lion
2 : puma
3 : jagur
当然,方法1不应该起作用,但今天我看到了从另一家公司收到的一些代码,下面有一行。(仅显示了代码片段)

这里的
ls
是类对象的列表。该类有一个实例成员变量Oi。 我觉得这行代码很奇怪,我用调试器运行了代码,它运行正常!列表成员对象的Oi值被指定为0,1,2,3


这是怎么回事?顺便说一下,这行代码出现在一个不是类的成员函数(它是一个全局函数)的函数中。

在Python中有一个映射类型
dict
。当迭代字典时,您正在迭代它的键。要获取这些值,您仍然需要使用键作为索引:

d = {'a': 3, 'b': 5, 'c': 4}
for key in d:
    print(key, d[key])
输出(顺序可能不同):

您看到的代码很可能正在执行此操作(迭代
dict
,或另一个映射对象,而不是
列表
)。如果你看到像这样的东西

d = {}  # An empty dict

然后它是一个
dict
对象。(空集合被初始化为
set()

方法1适用的数据结构是
dict
,而不是
列表。当您迭代一个
dict
时,您迭代它的键。试试看:
l={0:'tiger',1:'lion'}
谢谢,我发现它是一个dict。哦,耶,我错过了
ls
是由
ls={}
初始化的,意思是它是一个dict。我看Python代码已经有一段时间了,所以我犯了一个错误。现在清楚了。感谢
a 3
b 5
c 4
d = {}  # An empty dict