了解 python for 循环,对象用作索引?
Understanding python for loop, with object used as index?
这是我写的一些测试代码。
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
当然,方法一应该行不通,但今天我看到一些我从另一家公司收到的代码,下面有一行。(仅显示片段)
for idx in ls: ls[idx].Oi = idx
这里 ls
是 class 个对象的列表。 class有一个实例成员变量Oi。
考虑到这一行 st运行ge,我 运行 使用调试器编写代码,并且它有效!列表成员对象的 Oi 值被分配为 0,1,2,3,..
这是如何运作的?顺便说一下,这行代码出现在一个函数中,它不是 class 的成员函数(它是一个全局函数)。
在 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()
)
这是我写的一些测试代码。
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
当然,方法一应该行不通,但今天我看到一些我从另一家公司收到的代码,下面有一行。(仅显示片段)
for idx in ls: ls[idx].Oi = idx
这里 ls
是 class 个对象的列表。 class有一个实例成员变量Oi。
考虑到这一行 st运行ge,我 运行 使用调试器编写代码,并且它有效!列表成员对象的 Oi 值被分配为 0,1,2,3,..
这是如何运作的?顺便说一下,这行代码出现在一个函数中,它不是 class 的成员函数(它是一个全局函数)。
在 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()
)