我执行以下代码:
array = {}
然后,我尝试通过以下方式向该数组添加内容:
array.append(valueToBeInserted)
这似乎没有.append
方法,那我该怎么向数组中添加元素呢?
{}
表示一个空字典,而不是数组或列表。若要创建空列表或数组,请使用 []
。
初始化一个空列表的方法如下:
my_list = []
或者my_list = list()
要向列表中添加元素,请使用append
方法。
my_list.append(12)
使用extend
函数将列表扩展以包括另一个列表中的元素。
my_list.extend([1,2,3,4])
my_list
--> [12,1,2,3,4]
从列表中删除元素,请使用remove
。my_list.remove(2)
字典表示一个键值对的集合,也称为关联数组或映射。
要初始化一个空字典,请使用{}
或dict()
字典有键和值
my_dict = {'key':'value', 'another_key' : 0}
为了将一个字典扩展到另一个字典中,您可以使用update
方法。
my_dict.update({'third_key' : 1})
从字典中删除一个值
del my_dict['key']
如果您这样做:
array = {}
你正在创建一个字典,而不是一个数组。
如果你需要一个数组(在Python中被称为列表),你可以这样声明:
array = []
那么您可以像这样添加项目:
array.append('a')
在Python中,数组(称为list
)使用[]
符号表示。而{}
用于dict
(在其他语言中也称为哈希表、关联数组等),因此你无法对字典使用'append'。
如果你真正想要一个数组(列表),请使用:
array = []
array.append(valueToBeInserted)
为了完整起见,您也可以这样做:
array = []
array += [valueToBeInserted]
如果这是一个字符串列表,这个也可以工作:array += 'string'
array = += [value]
和 array.append(value)
之间会有性能影响吗? - Ng Sek Long在一些语言,比如JAVA中,你可以使用花括号来定义数组,例如下面这样。但是在Python中,花括号有不同的含义:
Java:
int[] myIntArray = {1,2,3};
String[] myStringArray = {"a","b","c"};
然而,在Python中,花括号被用于定义字典,需要一个 key:value
赋值,如 {'a':1, 'b':2}
如果要定义一个数组(在Python中实际上被称为列表),可以使用以下方式:
Python:
mylist = [1,2,3]
mylist = list()
mylist.append(1)
mylist.append(2)
mylist.append(3)
print(mylist)
>>> [1,2,3]
你也可以这样做:
array = numpy.append(array, value)
numpy.append()
方法返回一个新对象,因此如果您想修改初始数组,则必须编写:array = ...
。numpy
来附加到一个数组中,并在此过程中创建一个新对象。 - dweryextend()
通过单例扩展这只是纯学术性质,但extend()
方法也可以用于将值附加到列表中。只需将值放入元组/列表中,并通过它来扩展列表。
lst = []
value = 1
lst.extend((value,)) # <--- (value,) is a singleton tuple
iadd
(+= [1]
)操作符追加一个单元素列表更快。实际上,它的性能与list.append
相同。请查看这里的结果。此外,由于构建元组比构建列表更快,通过追加一个单元素元组来扩展也比追加一个单元素列表更快。import timeit
t1 = min(timeit.repeat("lst.append(1)", "lst = []")) # 0.058306435006670654
t2 = min(timeit.repeat("lst += [1]", "lst = []")) # 0.08136546600144356
t3 = min(timeit.repeat("lst.extend((1,))", "lst = []")) # 0.05731289298273623
t4 = min(timeit.repeat("lst.extend([1])", "lst = []")) # 0.1094264310086146
iadd
(+=
)在性能方面与list.extend
相比非常有竞争力,如下面的实验所示。t5 = min(timeit.repeat("lst += items", "lst = []; items=[1, 2]")) # 0.033552975044585764
t6 = min(timeit.repeat("lst.extend(items)", "lst = []; items=[1, 2]")) # 0.060612224973738194
array
模块标准库还包含了array
模块,它是对C数组的封装。与C数组一样,array.array
对象只能保存单一类型的数据(在创建对象时需要指定类型代码),而Python的list
对象可以保存任何类型的数据。它还定义了append
/extend
/remove
等方法来操作数据。如果需要与C数组进行交互,这个模块非常有用。
import array
arr = array.array('f') # initialize a float array
arr.append(1) # append 1.0 to it (because its type is float)
arr.extend([2, 3]) # extend it by multiple values
lst = arr.tolist() # convert to list
arr # array('f', [1.0, 2.0, 3.0])
lst # [1.0, 2.0, 3.0]
# `arr` only accepts floats; `lst` doesn't have that restriction
lst.append('string') # <---- OK
arr.append('string') # <---- TypeError: must be real number, not str
array.array
对象相对于 list
来说,其主要优势在于内存效率。从下面的示例中可以看出,arr
的内存消耗大约是 lst
的十分之一。from pympler.asizeof import asizeof
lst = list(range(1_000_000))
arr = array.array('I', lst)
asizeof(lst) # 40000048
asizeof(arr) # 4000064
array.array
对象可能比使用列表更快。Python官方网站上有一个关于这个的轶事,给出了一个例子。它是关于将整数列表转换为字符串的。现代版本可能如下所示(转换为array.array
仍然比str.join
更快)。setup = "import array; lst=list(range(97,123))"
t8 = min(timeit.repeat("''.join(map(chr, lst))", setup)) # 2.106592966010794
t9 = min(timeit.repeat("array.array('B', lst).tobytes().decode()", setup)) # 1.2953468860359862
学习如何以最高效的方式创建数组不是个好主意吗?
创建并向数组中插入值非常简单:
my_array = ["B","C","D","E","F"]
但是,现在我们有两种方法将一个值插入到这个数组中:
慢速模式:
my_array.insert(0,"A")
- 在零位置插入一个"A"时,会将所有值向右移动:
"A" --> "B","C","D","E","F"
快速模式:
my_array.append("A")
将值“A”添加到数组的最后位置,而不触碰其他位置。"B","C","D","E","F", "A"
如果您需要展示排好序的数据,可以在必要的时候再展示。使用对您最有用的方式,但是了解每种方法的性能是很有趣的。
我认为你们都错了,正确的做法是:
首先要定义数组:array = array[]
,然后才能往里面添加元素:array.append ["hello"]
。
array = []
。 - Shaiarray = list()
来定义它。但是,使用 [] 将其定义为数组会提供仅适用于数组的特定功能,例如通过单个整数进行数组除法。例如:array/3
。 - Dalton Whyte