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