Python 使用map()代替for循环并编写更短(更好)的代码
更新此Python 使用map()代替for循环并编写更短(更好)的代码,python,python-3.x,Python,Python 3.x,更新此以使循环改用map()的方法是什么,并且如果代码太长,可以缩短?我将写一些例子: def function(self, box): if len(box) == 0: for objID in list(self.dict.keys()): self.dict[objID] += 1 if self.dict[objID] > self.maxF: self.deleteObjec
以使
循环改用map()
的方法是什么,并且如果代码太长,可以缩短?我将写一些例子:
def function(self, box):
if len(box) == 0:
for objID in list(self.dict.keys()):
self.dict[objID] += 1
if self.dict[objID] > self.maxF:
self.deleteObject(objID)
return self.object
这只是代码的一部分,但我想学习如何缩短它并让它更快地工作,但主要的一点是我想学习如何更好地编写它。如果没有看到您的deleteObject
函数,很难说这是否有效,但一般来说,如果我要像这样修改一本普通的旧字典,我会使用一个简单的理解:
self.dict = {k: v+1 for k, v in self.dict.items() if v <= self.maxF}
但是,如果self.dict
和self.object
必须有匹配的键,那么很明显,它们不应该是两个不同的字典,而是应该有一个包含复合值(对象、元组等)的字典。可以使用MAP进行如下操作:
map(lambda objID: self.dict[objID] < self.maxF ? self.dict[objID] +=1 : self.deleteObject(objID), self.dict.keys() )
map(lambda-objID:self.dict[objID]
您可以将列表中对象的(self.dict.keys()):
更改为self.dict.keys()中对象的:
,否则此代码就可以了。一行程序不一定比全循环运行得快,复杂的一行程序很难理解。@PranavHosangadi。他们需要调用list
,因为我怀疑self.deleteObject()正在从字典中删除指定的对象。不能在迭代字典的同时从字典中删除对象。复制钥匙是一种解决方案。并且复制到原始海报上。我同意@PranavHosangadi。您的代码布局良好,易于理解。使用map
在这里没有什么好处。你不会变换对象列表中的每个对象(映射的作用是什么),所以不要尝试在这里使用map。谢谢大家的回答,是的@FrankYellin它正在从字典中删除对象,所以必须使用列表。def deleteObject(objID):del self.object[objID]del self.dict[objID]
这不是python,python使用。。。如果条件不是这样…
。jsut写一个常规函数定义,就是把它赋给一个变量。
map(lambda objID: self.dict[objID] < self.maxF ? self.dict[objID] +=1 : self.deleteObject(objID), self.dict.keys() )