Python序列语法

Python序列语法,python,plugins,sublimetext2,sequences,Python,Plugins,Sublimetext2,Sequences,我是python新手,在阅读一个Sublime文本插件的一些代码时,遇到了一些我不熟悉的代码 views = [v for v in sublime.active_window().views()] 这是我不理解的[v对v]部分。这段代码到底在做什么 提前感谢!这是一个列表理解。它相当于但比: views = [] for v in sublime.active_window().views(): views.append(v) 注意,在这种情况下,他们应该只使用列表: python

我是python新手,在阅读一个Sublime文本插件的一些代码时,遇到了一些我不熟悉的代码

views = [v for v in sublime.active_window().views()]
这是我不理解的[v对v]部分。这段代码到底在做什么


提前感谢!

这是一个列表理解。它相当于但比:

views = []
for v in sublime.active_window().views():
    views.append(v)
注意,在这种情况下,他们应该只使用列表:

python2.7中还引入了其他类型的理解:

集合理解:

{x for x in iterable}
{k:v for k,v in iterable_that_yields_2_tuples}
和听写理解:

{x for x in iterable}
{k:v for k,v in iterable_that_yields_2_tuples}
因此,创建所有值均为1的字典是一种低效的方法:

{k:1 for k in ("foo","bar","baz")}
最后,python还支持它们至少在python2.6中可用-我不确定它们是何时引入的:

(x for x in iterable)

这类似于列表理解,但它返回一个iterable对象。生成器在您实际迭代它们之前并不特别有用。其优点是生成器可以动态计算值,而不是将值存储在一个列表中,您可以在以后进行迭代。它们的内存效率更高,但可以执行在某些情况下,比列表综合慢-在另一些情况下,它们比列表综合更出色,因为这很容易说-请给我前3个元素-而对于列表综合,你必须提前计算所有元素,这有时是一个昂贵的过程。

这是列表综合。它相当于but效率不比:

views = []
for v in sublime.active_window().views():
    views.append(v)
注意,在这种情况下,他们应该只使用列表:

python2.7中还引入了其他类型的理解:

集合理解:

{x for x in iterable}
{k:v for k,v in iterable_that_yields_2_tuples}
和听写理解:

{x for x in iterable}
{k:v for k,v in iterable_that_yields_2_tuples}
因此,创建所有值均为1的字典是一种低效的方法:

{k:1 for k in ("foo","bar","baz")}
最后,python还支持它们至少在python2.6中可用-我不确定它们是何时引入的:

(x for x in iterable)
这类似于列表理解,但它返回一个iterable对象。生成器在您实际迭代它们之前并不特别有用。其优点是生成器可以动态计算值,而不是将值存储在一个列表中,您可以在以后进行迭代。它们的内存效率更高,但可以执行在某些情况下,比列表比较慢-在另一些情况下,它们比列表理解更出色,因为这很容易说-请给我前3个元素-而对于列表理解,您必须提前计算所有元素,这有时是一个昂贵的过程。

这是一个。这有点像一个带有in的表达式换行循环,用于动态创建快速列表。在本例中,它创建升华.active\u window.views返回的列表的浅层副本

当您需要转换每个值时,列表理解确实很有用。例如,这里有一个快速列表理解,可以获得前十个完美正方形:

[x*x for x in range(1,11)]
这是一个。它有点像一个带有内联for循环的表达式,用于动态创建快速列表。在本例中,它创建的是sublime.active\u window.views返回的列表的浅层副本

当您需要转换每个值时,列表理解确实很有用。例如,这里有一个快速列表理解,可以获得前十个完美正方形:

[x*x for x in range(1,11)]

最好提及Python支持的其他类型的理解:set{x for x in iterable},dict{k:v for k,v in iterable},iterableThank中的generator x for x谢谢。这有助于理解它只是一个更有效的循环。@dherrin79-我更新了我的答案,以讨论其他类型的理解和生成器表达式,因为它们相似。@mgilson谢谢。这是非常有用的信息。我感谢您花时间阅读本教程不同类型的理解。我比我更喜欢这个答案。@dherrin79,也许你想切换被接受的答案。最好提及Python支持的其他类型的理解:set{x for x in iterable},dict{k:v for k,v in iterable},iterableThank中的generator x for x谢谢。这有助于理解它只是一个更有效的循环。@dherrin79-我更新了我的答案,以讨论其他类型的理解和生成器表达式,因为它们相似。@mgilson谢谢。这是非常有用的信息。我感谢您花时间阅读本教程不同类型的理解。我比我更喜欢这个答案。@dherrin79,也许你想换一个被接受的答案。在正常情况下,这是一个好主意。但是当老板说为这个写一个插件,并在两天内完成它,同时处理你的其他东西时,这并不完全是一个现实。所以来解决这个问题吧e编程问题,而不是有不切实际需求问题的老板。@millimoose你能指出FAQ中的一部分吗?该部分说基本/初学者编程问题不允许出现在堆栈溢出上?谢谢!在正常情况下
那是个好主意。然而,当老板说为这个编写一个插件,并在两天内完成它,同时处理你的其他东西时,这并不完全是一个现实,不是有不切实际需求问题的老板。@millimoose你能指出FAQ中的一部分吗?该部分说基本/初学者编程问题不允许出现在堆栈溢出上?谢谢非常感谢你的投入。知道它的确切名称将有助于更多地了解它。非常感谢您的输入。知道它的确切名称将有助于更多地了解它。