Python 列表作为函数输入,语法怪异

Python 列表作为函数输入,语法怪异,python,list,semantics,Python,List,Semantics,在学习Django框架基础知识的过程中,我发现了以下代码。我知道join() output = ', '.join([p.question for p in latest_poll_list]) 当然,结果对我来说非常清楚,但我更愿意这样使用它 array = [] for p in latest_poll_list: array.append(p.question) output = ', '.join(array) 有人能解释一下吗 array = [p.question for

在学习Django框架基础知识的过程中,我发现了以下代码。我知道
join()

output = ', '.join([p.question for p in latest_poll_list])
当然,结果对我来说非常清楚,但我更愿意这样使用它

array = []
for p in latest_poll_list:
    array.append(p.question)
output = ', '.join(array)
有人能解释一下吗

array = [p.question for p in latest_poll_list]
是一个列表理解。这相当于:

array = []
for p in latest_poll_list:
    array.append(p.question)
因此,您发布的代码将执行完全相同的操作。列表理解只是创建带有
for
循环的列表的一种更简洁的方法


仅供参考,您不需要创建列表

output = ', '.join(p.question for p in latest_poll_list)

也应该有效,因为
join
包含一个iterable。

它被称为
列表理解,在python中非常重要。。。我建议学习themList理解是很好的,尽管有时很难一次看到它们做了什么,特别是当它们与其他函数或语句混合在一起时。对列表的理解有很好的解释。更好的是:去掉括号。您将得到一个生成器表达式,它具有列表理解的所有优点,甚至不需要构建列表。
join()
使用列表比使用生成器表达式更有效。@Sukritkalla实现os
str.join
的速度要快一些,是的,但一般来说,避免使用列表是可取的,即使它速度较慢,也会更可取,因为它有更少的混乱和更漂亮。@jh314我不确定这是否正确(等效)。。。使用dis.dis检查发动机罩下的实际材料:P