什么是[d [k]对于d中的k]这样的表达式?

时间:2014-10-23 19:37:53

标签: python syntax

Python新手在这里。

在学习Python时,我遇到了一些非常好的,简洁的代码,例如:

[d[k] for k in d]

我可以立即看到这些表达式有很多可能性("这些类型"意思包含在[]中)。

我不确定这种表达式是什么,因此我无法搜索有关如何使用它的信息。对于一些知识渊博的人来说,指导我学习那些讨论这些内容的Python文档或其他资源的部分会很棒,并且可能会提供一些有关如何有效使用它们的建议。

1 个答案:

答案 0 :(得分:8)

您发布的代码是表达式,而不是声明。

通常称为list comprehension,其基本结构为:

[item for item in iterable if condition]

其中if condition子句是可选的。结果是根据iterable中的项目创建的新列表对象(可能由if condition过滤):

>>> [x for x in (1, 2, 3)]  # Get all items in the tuple (1, 2, 3).
[1, 2, 3]
>>> [x for x in (1, 2, 3) if x % 2]  # Only get the items where x % 2 is True.
[1, 3]
>>>

此外,还有dictionary comprehensions

{key:value for key, value in iterable if condition}

set comprehensions

{item for item in iterable if condition}

每个都与列表推导相同,但分别生成字典或集合。

但请注意,您需要使用Python 2.6或更高版本才能使用这些构造。


您应该注意的最后一个工具是generator expression

(item for item in iterable if condition)

与列表推导类似,它创建了一个生成器对象,可以懒惰地生成它的项目(在需要时一次一个):

>>> (x for x in (1, 2, 3))
<generator object <genexpr> at 0x02811A80>
>>> gen = (x for x in (1, 2, 3))
>>> next(gen)  # Advance the generator 1 position.
1
>>> next(gen)  # Advance the generator 1 position.
2
>>> next(gen)  # Advance the generator 1 position.
3
>>> next(gen)  # StopIteration is raised when there are no more items.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>>