Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用map()代替for循环并编写更短(更好)的代码_Python_Python 3.x - Fatal编程技术网

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() )