Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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 函数的列表理解语法_Python - Fatal编程技术网

Python 函数的列表理解语法

Python 函数的列表理解语法,python,Python,是否有一种方法可以在函数中使用列表理解语法,以减少计算/调用,有点像try/catch,例如一种编写方法 顾客=口述 对于客户中的客户: 如果电影不在客户[客户]中: 顾客[customer] 作为 对于客户中的客户: p、 如果电影不在p=customers[customer]中,则追加电影 如果调用/操作p非常繁重,因此很重要,如果调用一次或两次不确定您要减少什么类型的计算/调用,但是如果是双重查找客户[customer],您可以这样做: for movies in customers.va

是否有一种方法可以在函数中使用列表理解语法,以减少计算/调用,有点像try/catch,例如一种编写方法

顾客=口述 对于客户中的客户: 如果电影不在客户[客户]中: 顾客[customer] 作为

对于客户中的客户: p、 如果电影不在p=customers[customer]中,则追加电影
如果调用/操作p非常繁重,因此很重要,如果调用一次或两次

不确定您要减少什么类型的计算/调用,但是如果是双重查找客户[customer],您可以这样做:

for movies in customers.values():
    if movie not in movies:
        movies.append(movie)
.values迭代dict的值,因此在您的情况下,每个客户的电影列表,因此它避免了迭代客户和查找电影列表两次。假设客户是一个由列表作为值组成的目录,那么这一点就行了。 您甚至可以通过一系列设置来增强这一点:


不确定您试图减少哪种计算/调用,但如果是双重查找客户[customer],您可以这样做:

for movies in customers.values():
    if movie not in movies:
        movies.append(movie)
.values迭代dict的值,因此在您的情况下,每个客户的电影列表,因此它避免了迭代客户和查找电影列表两次。假设客户是一个由列表作为值组成的目录,那么这一点就行了。 您甚至可以通过一系列设置来增强这一点:

您可以在列表理解中使用dict的items方法:

[ expression for key,val in customers.items() ]
因此,您可以滥用它来产生附加的副作用:

[ val.append(movie) for key,val in customers.items() if movie not in val ]
列表理解的实际值几乎是无用的:它将是一个无列表,但其长度将告诉您有多少val不包含电影

有时候,越短越好。我想这可能是其中之一

编辑:刚刚意识到的键是未使用的,所以.values方法更好,我找到了它的用途,所以我很少忘记它

[ val.append(movie) for val in customers.values() if movie not in val ]
您可以在列表理解中使用dict的items方法:

[ expression for key,val in customers.items() ]
因此,您可以滥用它来产生附加的副作用:

[ val.append(movie) for key,val in customers.items() if movie not in val ]
列表理解的实际值几乎是无用的:它将是一个无列表,但其长度将告诉您有多少val不包含电影

有时候,越短越好。我想这可能是其中之一

编辑:刚刚意识到的键是未使用的,所以.values方法更好,我找到了它的用途,所以我很少忘记它

[ val.append(movie) for val in customers.values() if movie not in val ]
单行代码: [movies.appendmovie用于客户中的电影。如果电影不在电影中,则为值] dict.values返回字典值的类似列表的对象,不包括键。上面的行计算list.append的返回值列表,但list.append不返回任何值,并且该列表将被丢弃

我建议实际写出完整的逻辑:

对于customers.Value中的电影: 如果电影不在电影中: 电影 只有当你真正需要列表时才使用列表理解。它只会让那些不理解列表理解的人感到困惑,而且它不会提供任何加速或更干净的代码

此外,如果您不想在列表中重复项目,请考虑一个集合,该集合包含不同的元素并提供加速。 [movies.appendmovie用于客户中的电影。如果电影不在电影中,则为值] dict.values返回字典值的类似列表的对象,不包括键。上面的行计算list.append的返回值列表,但list.append不返回任何值,并且该列表将被丢弃

我建议实际写出完整的逻辑:

对于customers.Value中的电影: 如果电影不在电影中: 电影 只有当你真正需要列表时才使用列表理解。它只会让那些不理解列表理解的人感到困惑,而且它不会提供任何加速或更干净的代码


此外,如果您不想在列表中重复项目,那么考虑一个集合,它包含不同的元素并提供加速。当您希望列表作为输出时,应该使用列表理解,而不是减少代码行。您正在有效地尝试使用理解,以解决附加到现有列表的副作用,这一点已在讨论中。这与列表理解无关,而是将呼叫客户[customer]从两个循环值(而不是键)减少到一个循环值,此外,您可以通过使用电影集来获得更高的性能,而不是已经存在的listp,因为客户不是吗?当您希望列表作为输出时,应该使用列表理解,而不是减少代码行。您正在有效地尝试使用理解,以解决附加到现有列表的副作用,这一点已在讨论中。这与列表理解无关,而是将呼叫客户[customer]从两个循环值(而不是键)减少到一个循环值,此外,您可以通过使用电影集而不是列表来获得更高的性能。这是针对我要检查的每个客户的,如果该电影已经在他的lis中 t、 也就是说,调用电影的call customers[客户]列表两次:一次用于检查电影是否在该列表中,另一次用于附加该列表。我要检查的是每个客户的电影是否已经在其列表中,即call customers[客户]电影列表被调用两次:一次用于检查电影是否在该列表中,另一次用于附加它。