python数组创建语法[for in range]

时间:2015-03-09 11:51:37

标签: python list-comprehension

我遇到了以下语法来创建一个python数组。这对我来说很奇怪。

任何人都可以向我解释一下吗?我该如何学习这种语法?

[str(index) for index in range(100)]

3 个答案:

答案 0 :(得分:4)

首先,这不是一个数组。这是一个清单。 Python确实有内置数组,但它们很少使用(如果你感兴趣的话,谷歌array模块)。您看到的结构称为列表理解。这是在纯Python中进行矢量化操作的最快方法。让我们来看看一些例子。

简单列表推导以这种方式编写: [item for item in iterable] - 这将构建一个包含iterable的所有项的列表。

实际上,您可以使用表达式或函数对每个项目执行某些操作:[item**2 for item in iterable] - 这将对每个元素进行平方,或[f(item) for item in iterable] - f是一个函数。

您甚至可以添加ifelse语句,例如[number for number in xrange(10) if not number % 2] - 这将创建偶数列表; ['even' if not number % 2 else 'odd' for number in range(10)] - 这就是你使用else语句的方式。

您可以嵌套列表推导[[character for character in word] for word in words] - 这将创建列表列表。列表推导类似于generator expressions,因此您应该使用Google Python文档获取更多信息。

列表推导和生成器表达式是最强大和最有价值的Python功能之一。只需启动一个交互式会话并播放一段时间。

P.S。

还有其他类型的理解可以创建集和词典。他们使用相同的概念。谷歌他们提供更多信息。

答案 1 :(得分:1)

列表理解本身是从数学的集合理解中得出的概念,在哪里获得新集合,您指定父集合以及过滤其元素的规则。

在最简单但完整的形式列表中,理解力如下:

[f(i) for i in range(1000) if i % 2 == 0]

range(1000) - 您迭代的一组值。它可以是任何可迭代的(列表,元组等)。 range只是一个函数,它返回连续数字列表,例如range(4) -> [0, 1, 2, 3]

i - 将在每次迭代时分配变量。

if i/2 == 0 - 过滤值的规则条件。如果condition不为True,则结果列表将不包含此元素。

f(i) - i上的任何python代码或函数,其结果将在结果列表中。

要理解列表推导的概念,请在python控制台中试试它们,然后查看输出。以下是其中一些:

[i for i in [1,2,3,4]]
[i for i in range(10)]
[i**2 for i in range(10)]
[max(4, i) for i in range(10)]
[(1 if i>5 else -1) for i in range(10)]
[i for i in range(10) if i % 2 == 0]

答案 2 :(得分:0)

我建议你将你所面对的所有理解展开到for循环中,以便更好地理解它们的机制和语法,直到你习惯它们为止。例如,您的理解可以通过以下方式解开:

newlist = []
for index in range(100)
    newlist.append(str(index))

我希望现在很清楚。