我正在剑桥考试委员会教授A Level课程.实际论文中的一个典型问题是:
在您选择的编程语言中,声明一个包含十个整数的数组,然后对其进行初始化.
我有这个:
myArray = [] #create the array
for i in range(10): # initializes to 0
myArray.append(0)
Run Code Online (Sandbox Code Playgroud)
我相信这是大多数人在Python中会做的事情?然而,与Pascal等不同,它并没有严格地回答这个问题,因为Python中的列表本质上是动态数组,并且增加了不限制每个元素的数据类型的问题.我可以声明一个特定的大小数组,并在Pascal中输入,而不是一个空的动态列表,没有任何类型的循环并限制数组的类型?
像(伪代码)的东西:
myArray[10] : integer
Run Code Online (Sandbox Code Playgroud)
这是一个非商业性的问题,但是一个教育问题.
Pie*_* GM 11
您可以尝试使用该array模块指定数组的类型:
import array
a = array.array('i') # Define an integer array.
Run Code Online (Sandbox Code Playgroud)
然后,您可以将所需的元素添加到数组中.不过,我不确定你是否可以预定义数组应该具有的大小.如果你想要一个包含十个整数元素的数组,每个元素为零,你可以这样做:
a = array.array('i', [0]*10)
Run Code Online (Sandbox Code Playgroud)
如文档中所述,'i'强制数组元素为整数.DeprecationWarning如果你试图在一个整数数组中插入一个浮点数,Python 2.6将抛出一个,但是会将浮点数转换为int:
>>> a[0]=3.14159
>>> a
>>> array('i', [3, 0, 0, 0, 0, 0, 0, 0, 0, 0])
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用该numpy包,它允许您定义数组的大小和类型.
import numpy as np
a = np.empty(10, dtype=int) # Define a integer array with ten elements
Run Code Online (Sandbox Code Playgroud)
该np.empty只保留对阵列中存储一些空间,它不初始化它.如果你需要一个0的数组,你可以这样做:
a[:] = 0
Run Code Online (Sandbox Code Playgroud)
或直接使用np.zeros功能:
a = np.zeros(10, dtype=int)
Run Code Online (Sandbox Code Playgroud)
同样,在一个整数数组中插入一个float会静默地将float转换为整数.
注意numpy和之间的区别array:一旦定义了数组numpy,就不能在不重新创建数组的情况下更改其大小.从这个意义上讲,它满足了你对"10和10个整数"的要求.相比之下,array.array对象可以看作具有固定元素类型的列表:数组是动态的,您可以增加其大小.
小智 6
这是一种更加pythonic的方式来初始化列表:
>>> l = [0] * 10
>>> l
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> l[1] = 1
>>> l
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)
当然,这并没有回答如何创建像受限元素列表这样的非pythonic事物的问题.
您可以使用阵列模块
a = array.array('i',(0 for _ in xrange(10)))
Run Code Online (Sandbox Code Playgroud)
数组要求所有元素都是相同的类型,如创建时指定的那样.但是,他们仍然可以附加
如果你真的确定了,你可以使用ctypes模块来构建一个C数组.但是,这可能不是非常pythonic,因为它迫使你做更多低级别的东西.
import ctypes
intArray10 = ctypes.c_int * 10
myArray = intArray10(*(0 for _ in xrange(10)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8827 次 |
| 最近记录: |