【问题标题】:List as function input, weird syntax列表作为函数输入,奇怪的语法
【发布时间】:2013-08-01 05:09:01
【问题描述】:

在学习 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)

谁能解释一下?

【问题讨论】:

  • 它称为list comprehension,它在python中非常重要......我建议了解它们
  • 列表理解非常好,尽管有时很难一口气看出它们做了什么,尤其是当它们混合在其他函数或语句中时。
  • pythonforbeginners.com/lists/list-comprehensions-in-python 对列表推导有很好的解释。

标签: python list semantics


【解决方案1】:
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 接受一个可迭代对象。

【讨论】:

  • 更好的是:去掉括号。您将获得一个生成器表达式,它具有列表推导式的所有功能,甚至无需构建列表。
  • join() 在生成器表达式上使用列表效果更好。
  • @SukritKalra os str.join 的实现特别快一点,是的,但总的来说,避免使用该列表可能是可取的,即使它较慢,它也是可取的,因为它具有较少的混乱并且是更漂亮。
  • @jh314 我不确定那是真的(等价性)...使用 dis.dis 来检查引擎盖下的东西:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多