Python数组与列表的区别
在Python中,列表和数组都被用作数据结构来存储数据。本文将通过案例对比来深入探讨Python数组与列表之间的区别
1、Python数组
Python内置的array模块可用于创建Python数组(ArrayType)
import array
# 1)array.array():仅支持一维数组
# 第一个参数表示类型,用于规定数组元素的类型
# 例如,i:int(大写为无符号int),l:long(大写为无符号long),f:float,d:double
arr1 = array.array('i', [2, 3, 5])
print(arr1.tolist()) # [2, 3, 5]
print(type(arr1)) # <class 'array.array'>
# 2)numpy.array():支持多维数组
arr2 = np.array([2, 3, 5])
print(arr2.tolist()) # [2, 3, 5]
print(type(arr2)) # <class 'numpy.ndarray'>
2、Python列表
ls = [0, 'abc', True]
print(ls) # [0, 'abc', True]
print(type(ls)) # <class 'list'>
3、Python数组和列表反转
Python切片格式:[sta:end:step]
- 当step>0时,sta缺省的为0,end缺省的为
len-1
,step缺省的为1,可简写为[::]
- 当step<0时,sta缺省的为-1,end缺省的为
-(len-1)
,step缺省的为-1,可简写为[::-1]
,表示倒序
# 数组反转
print(arr1[::-1].tolist()) # [5, 3, 2]
print(arr1.reverse()) # None
print(arr1) # array('i', [5, 3, 2])
# 列表反转
print(ls[::-1]) # [True, 'abc', 0]
print(ls.reverse()) # None
print(ls) # [True, 'abc', 0]
值得注意的是,Python数组和列表对象的reverse()
方法仅用于反转修改原来的对象,reverse()
方法本身返回结果为None
4、Python数组的其他操作
# 一次添加单个元素
arr1.append(7)
print(arr1.tolist()) # [5, 3, 2, 7]
# 一次添加多个元素
arr1.extend([11, 13])
print(arr1.tolist()) # [5, 3, 2, 7, 11, 13]
# 修改元素
arr1[0] = 1
print(arr1.tolist()) # [1, 3, 2, 7, 11, 13]
# 删除元素
arr1.remove(3)
print(arr1.tolist()) # [1, 2, 7, 11, 13]
# 根据索引删除
arr1.pop(3)
print(arr1.tolist()) # [1, 2, 7, 13]
5、结论
通过以上示例使用的对比,Python数组与列表的区别可总结为以下五点:
- 1) Python数组和列表具有相同的数据存储方式。数组只能包含一种数据类型的元素,列表可以包含任何数据类型的元素
- 2) Python数组和列表都是有序、可变长度、值可重复的,数组需要使用array模块声明,列表不用
- 3) Python数组和列表都支持索引、切片、迭代等
- 4) 存储相同数量的数据,数组使用较紧凑的内存连续的方式存储数据,占用内存较小,而列表消耗内存较多
- 5) 数组更适合数据运算,数组一般使用
np.array()
,不用array模块,列表比数组更加灵活,如无特殊需要,不建议使用数组