我遇到了以下语法来创建一个python数组。这对我来说很奇怪。
任何人都可以向我解释一下吗?我该如何学习这种语法?
[str(index) for index in range(100)]
答案 0 :(得分:4)
首先,这不是一个数组。这是一个清单。 Python确实有内置数组,但它们很少使用(如果你感兴趣的话,谷歌array
模块)。您看到的结构称为列表理解。这是在纯Python中进行矢量化操作的最快方法。让我们来看看一些例子。
简单列表推导以这种方式编写:
[item for item in iterable]
- 这将构建一个包含iterable的所有项的列表。
实际上,您可以使用表达式或函数对每个项目执行某些操作:[item**2 for item in iterable]
- 这将对每个元素进行平方,或[f(item) for item in iterable]
- f是一个函数。
您甚至可以添加if
和else
语句,例如[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))
我希望现在很清楚。