我尝试在列表中获取对象实例的索引。而且我不知道如何在没有for循环的情况下做到这一点。
如果有人可以向我展示正确的方向,而不是让它循环。
我发现该列表的实例与any() - 函数有关,但无法从中获取索引。
我试着澄清我的问题。如果any() - fucntion可以找到该列表(self.data)具有对象的实例。 any() - 函数只返回true / false。是否有函数或方法来获取该实例的索引,以便我可以调用它。
代码:
class MyClass:
def __init__(self, f):
self.data = []
self.f = open(f, "rb")
self.mod = sys.modules[__name__]
def readFile(self):
f = self.f
try:
self.head = f.read(8)
while True:
length = f.read(4)
if length == b'':
break
c = getattr(self.mod, f.read(4).decode())
if any(isinstance(x, c) for x in self.data):
index = self.data.index(c) #Problem is here
self.data[index].append(f.read(int(length.hex(), 16)))
else:
obj = c(data=f.read(int(length.hex(), 16)))
self.data.append(obj)
f.read(4) #TODO check CRC
finally:
f.close()
答案 0 :(得分:2)
enumerate
是前往这里的方式。
...
c = getattr(self.mod, f.read(4).decode())
found = [ (i, x) for (i,x) in enumerate(self.data) if isinstance(x, c) ]
if len(found) > 0:
index, val = found[0]
...
答案 1 :(得分:1)
专注于在self.data
列表中获取对象及其索引的实例:
# ...
# This gives you back a class name I assume?
c = getattr(self.mod, f.read(4).decode())
# The following would give you True/False ... which we don't need
# any(isinstance(x, c) for x in self.data)
# Now, this will return _all_ the instances of `c` in data
instances = [x for x in self.data if isinstance(x, c)]
if len(instances):
# Assuming that only 1 instance is there
index = self.data.index(instances[0])
# ??? What do you append here?
self.data[index].append()
else:
obj = c(data=f.read(int(length.hex(), 16)))
self.data.append(obj)
f.read(4) #TODO check CRC