了解python for循环,将对象用作索引?

时间:2018-08-30 13:56:28

标签: 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 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不起作用,但是今天我看到了从另一家公司收到的一些代码,并且在下面有一行(仅显示摘录)

for idx in ls: ls[idx].Oi = idx

这里ls是类对象的列表。该类具有实例成员变量Oi。 认为这行很奇怪,我用调试器运行了代码,并且可以正常工作!列表成员对象的Oi值被分配为0、1、2、3,..

这是如何工作的?顺便说一句,这行代码可以在不是类的成员函数的函数中看到(它是全局函数)。

1 个答案:

答案 0 :(得分:0)

在Python中,有一个映射类型dict。遍历字典时,需要遍历其键。要获取值,您仍然需要使用键作为索引:

d = {'a': 3, 'b': 5, 'c': 4}
for key in d:
    print(key, d[key])

输出(顺序可能有所不同)

a 3
b 5
c 4

很有可能您看到的代码正在执行此操作(在dict或另一个映射对象上,而不是在list上迭代)。如果您看到类似

的初始化内容
d = {}  # An empty dict

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