清空Python数组

46

如何清空一个数组,使其不含任何元素?

我想这样做是为了存储新值(一组新的100个浮点数),并找到最小值。

目前我的程序在读取集合的最小值之前可能会读取旧值,因为它会将自己附加到仍然包含旧值的先前集合中。顺便说一下,我使用的是 .append 方法。

5个回答

59

请注意listarray是不同的类别。你可以这样做:

del mylist[:]

这实际上会修改您现有的列表。David的答案将创建一个新列表并将其分配给相同的变量。哪种方式取决于情况(例如,是否有其他变量引用了同一列表?)。

尝试:

a = [1,2]
b = a
a = []

并且

a = [1,2]
b = a
del a[:]

每次打印出ab,以观察它们之间的差异。


真的吗,Python 中有数组?我不知道。 (实际上我可能知道但忘了)无论如何,+1 以扩展我们答案之间的差异。我只是猜测这种差异对 OP 来说并不重要。 - David Z
我明白了,那很有帮助。 @david:是的,对我来说没有太大区别。但我的新手状态已经减少了 :P - pjehyun
数组不同:其实并不是,del 可以解决问题;请参考我的回答。 - John Machin
@John,我不是说del不能用,只是列表和数组是不同的。 - Matthew Flaschen

34

很简单:

array = []

这将会把array设置成一个空列表。顺便说一句,在Python中它们被称为列表而不是数组。

如果这不能解决你的问题,编辑你的问题并包含能够演示你问题的代码样本。


这是在循环中重新初始化数组的方法。从根本上讲,这是对OP问题的正确回答。 - Rene Duchamp
我更喜欢这种方法,因为来自VBA背景的我们使用array =(""),所以非常相似且易于记忆!+1 - Dean
这个不太行。考虑一下下面的代码。a = [1,2,3] b = a在这之后我们有两种情况。
  1. a = [] # b == [1,2,3]
  2. a.clear() # b == []
- undefined
@tcglezen 这是使用了一个与问题无关的不同定义的"工作"。 - undefined

9

确实,数组存在,并且当涉及到像 delappend 这样的操作时,它们与列表并没有区别:

>>> from array import array
>>> foo = array('i', range(5))
>>> foo
array('i', [0, 1, 2, 3, 4])
>>> del foo[:]
>>> foo
array('i')
>>> foo.append(42)
>>> foo
array('i', [42])
>>>

值得注意的区别:创建数组时需要指定类型,通过 arr[i] = expressionarr.append(expression) 以及 lvalue = arr[i] 进行操作时会花费额外的时间将 C 类型和 Python 类型进行转换,但可以节省存储空间。

1
很少有人知道Python中的array类型和Python列表之间的区别。给你点赞。 - Kevin Anderson
这很微妙,但重要的是要说,如果列表在对象层次结构中,某些情况下,如果我们只是简单地执行 foo = [],我们将失去其引用,因为我们正在为 "foo" 定义一个新列表。因此,在这种情况下,使用 del foo[:] 是一种向上的方式,因为我们正在修改原始的 "foo" 列表。谢谢!=D - Eduardo Lucio

1
现在来回答那个你或许应该问的问题,比如说“我从某处得到了一百个浮点数;在找到最小值之前,我需要把它们放入数组或列表中吗?”
回答:不需要,如果“某处”是可迭代的,可以使用以下方法:
temp = []
for x in somewhere:
   temp.append(x)
answer = min(temp)

你可以这样做:

answer = min(somewhere)

例子:

answer = min(float(line) for line in open('floats.txt'))

0

Python列表clear()方法
clear()方法从列表中删除所有元素。

fruits = ['apple', 'banana', 'cherry', 'orange']
fruits.clear()
print(fruits)
# outputs: []

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