在Python中怎样声明动态数组?

40

我想声明一个数组,并删除ListBox中所有项目,而不管ListBox中的组名。 有人能帮我用Python编码吗? 我正在使用WINXP操作系统和Python 2.6。

我想声明一个数组,然后删除ListBox中的所有项目,无论ListBox中的组名是什么。请帮我用Python编写代码。我正在使用WINXP操作系统和Python 2.6版本。

5
你是在尝试制作GUI吗?使用哪个框架? - Esteban Küber
@KennyTM 请看问题的标签:列表框是“允许用户从列表中选择一个或多个项目的图形用户界面元素”。 - Anderson Green
5个回答

104
在Python中,list是一个动态数组。你可以像这样创建一个:
lst = [] # Declares an empty list named lst

或者你可以用物品填充它:

lst = [1,2,3]

您可以使用 "append" 添加项目:

lst.append('a')
你可以使用 for 循环遍历列表中的元素:
for item in lst:
    # Do something with item

或者,如果您想要跟踪当前索引:

for idx, item in enumerate(lst):
    # idx is the current idx, while item is lst[idx]

要删除元素,您可以使用del命令或remove函数,例如:

del lst[0] # Deletes the first item
lst.remove(x) # Removes the first occurence of x in the list

注意,不能同时迭代并修改列表;为了达到这个目的,你应该迭代列表的切片(它基本上是列表的副本)。例子如下:

 for item in lst[:]: # Notice the [:] which makes a slice
       # Now we can modify lst, since we are iterating over a copy of it

9
在Python中,动态数组是来自array模块的'array'。例如:
from array import array
x = array('d')          #'d' denotes an array of type double
x.append(1.1)
x.append(2.2)
x.pop()                 # returns 2.2

这种数据类型本质上是内置'列表'类型和numpy 'ndarray'类型的结合。像ndarray一样,数组中的元素是在初始化时指定的C类型。它们不是指向Python对象的指针;这可以帮助避免某些误用和语义错误,并略微提高性能。

然而,这种数据类型基本上具有与Python列表相同的方法,除了一些字符串和文件转换方法。它缺少所有额外的数字功能。

请参见https://docs.python.org/2/library/array.html获取详细信息。


数组模块能否存储“字符串值”,还是只能存储数字值? 我遇到了一个显示:“数组模块-高效的数字值数组”的表格。 唯一可行的C类型是'Py-Unicode',用于Unicode字符。 - gimmegimme

6

以下是我最近在不同的stackoverflow帖子上发现的一种很好的方法,针对多维数组,但这个答案也很适用于单维数组:

# Create an 8 x 5 matrix of 0's:
w, h = 8, 5;
MyMatrix = [ [0 for x in range( w )] for y in range( h ) ]  

# Create an array of objects:
MyList = [ {} for x in range( n ) ]

我喜欢这个功能,因为你可以在一行代码中动态指定内容和大小。

再来一个:

# Dynamic content initialization:
MyFunkyArray = [ x * a + b for x in range ( n ) ]

0

您可以按以下方式动态声明一个一维的Numpy数组:

import numpy as np

n = 2
new_table = np.empty(shape=[n,1])

new_table[0,0] = 2
new_table[1,0] = 3
print(new_table)

上面的例子假设我们知道需要有1列,但我们想要动态分配行数(在这种情况下,所需的行数等于2)。
输出如下所示:

[[2.] [3.]]


0

虽然常规的 Python 列表可以用作动态列表,但它可能存在一种实现方式上的问题。在 CPython 中,列表被实现为双指针数组,如此处所述here。 如果您想遍历长列表,会有很多内存跳转,与存储在内存中“连续”存储的数组相比,性能较低,意味着所有元素都一个接一个地存储。如果列表以这种方式排序,由于Temporal Locality,CPU 访问该内存的时间将减少。

如果您希望以这种方式存储列表,可以使用NumPy数组。但是NumPy数组不实现几何扩展。因此,您可以在Python中创建一个可以执行此操作的类。每次添加一个元素时,列表将扩展到其大小的x倍(其中x在不同的语言中有不同的实现方式)。这种类型的动态数组无法像Python列表那样存储不同类型的数据(本身就不好做),但它在迭代速度上要快于Python列表。

使用NumPy实现动态数组已经在这里这个存储库中进行了讨论。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接