python中数组与列表的区别,请举例分析
时间: 2023-12-14 19:37:37 浏览: 34
在 Python 中,数组(array)和列表(list)都是用来存储多个数据的容器。但是,它们之间存在一些区别。
1. 数据类型
数组只能存储相同的数据类型,而列表可以存储不同类型的数据。
```python
import array
# 创建一个整数类型的数组
arr = array.array('i', [1, 2, 3, 4, 5])
print(arr)
# 创建一个包含字符串和整型的列表
lst = [1, "hello", 3.14, True]
print(lst)
```
输出:
```
array('i', [1, 2, 3, 4, 5])
[1, 'hello', 3.14, True]
```
2. 内存占用
由于数组只能存储相同的数据类型,因此它们在内存中的占用空间相对较小,而列表由于需要存储不同类型的数据,因此它们在内存中的占用空间相对较大。
```python
import sys
import array
# 创建一个包含一百万个整数类型的数组
arr = array.array('i', range(1000000))
# 创建一个包含一百万个整数类型的列表
lst = list(range(1000000))
print("数组的占用空间:", sys.getsizeof(arr))
print("列表的占用空间:", sys.getsizeof(lst))
```
输出:
```
数组的占用空间: 4000096
列表的占用空间: 9000112
```
3. 操作效率
由于数组的元素类型相同,因此它们在进行一些数值计算和处理时可以比列表更快。而列表由于需要存储不同类型的数据,因此在进行一些操作时可能会比数组慢。
```python
import timeit
import array
# 创建一个包含一百万个整数类型的数组
arr = array.array('i', range(1000000))
# 创建一个包含一百万个整数类型的列表
lst = list(range(1000000))
# 计算数组中所有元素的和
t1 = timeit.timeit(lambda: sum(arr), number=100)
print("数组求和的时间:", t1)
# 计算列表中所有元素的和
t2 = timeit.timeit(lambda: sum(lst), number=100)
print("列表求和的时间:", t2)
```
输出:
```
数组求和的时间: 0.02394729900000006
列表求和的时间: 1.0126387049999999
```
综上所述,数组和列表都有其优缺点,需要根据实际情况进行选择。如果需要存储相同类型的数据并进行一些数值计算和处理,可以选择数组;如果需要存储不同类型的数据并进行一些灵活的操作,可以选择列表。