适当进行Python列表理解的巢状嵌套是多少?

2024-10-01 07:41:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个相对的python初学者,现在对这门语言相当熟悉,但仍在纠结什么是“python”的问题。我想知道人们对这个问题有什么看法。在

例如,使用以下代码行计算从peewee数据库中提取的每周租赁物业的平均成本:

    rental_avg_costperweek = sum([calcCostPerWeek(rental.price, rental.rental_freq) for rental in
                                 [LLSRental.select(LLSRental.id == this_id) for this_id in closest_rental_ids]]) \
                             / len(closest_rental_ids)

它使用嵌套的列表理解,这可能会令人困惑。在

或者,我可以把内心的理解放入一个临时变量中:

^{pr2}$

这可能有点简单,但是作为一个EX-C++程序员,我厌恶创建临时变量纯粹是为了可读性,因为它扰乱了命名空间,并潜在地为垃圾收集器做了更多的工作。在

另外,我认为如果读者不理解变量是纯临时的,那么如果有很多这样的变量,可能会使代码更加混乱。在

因此,我倾向于使用第一个选项而不是第二个选项,尽管有“扁平比嵌套更好”的指导……但是,python的老手们怎么看?在

谢谢!
格斯。在


Tags: 代码in语言id数据库idsfor选项
1条回答
网友
1楼 · 发布于 2024-10-01 07:41:21

我认为两者都错了。看起来你在做内心的理解,因为你想避免重新计算LLSRental.选择(). 如果你恰当地使用理解,你应该很少需要内在理解,因为你可以嵌套它们,比如

all_the_inputs = [ process_value(x) for y in all_the_stuff for x in y ]

或者别的什么。This is a nice but short post这很好地解释了这一点。在

不管怎样。有点像

^{pr2}$

似乎是一种更合适的计算方法。实际上,我创建的对象比您的代码要少,因为我没有无缘无故地列出两个列表,而您的代码为中间计算生成了两个列表,然后将它们丢弃。在

相关问题 更多 >