List and Tuple

本期教程,凡哥对比C语言给大家讲解了Python中类似数组的数据结构ListTuple, 他们赋值更加灵活。 ListTuple之间最大的区别就在于List可以列表里的修改值,而Tuple初始化之后就不可以修改。

List 动态数组

在C语言里面,数组的分配都是固定的, 当我们初始化一个数组的时候,我们经常需要给其分配一个超级大的内存空间。

#define MAXSIZE 10000
int arr[MAXSIZE];

超出内存空间的时候我们还需要申请一块新的更大的内存空间, 并将其迁移过去。

而在Python中数组是动态的 List,变长的。

# 初始化数组
arr = [0, 10, 12]

print(type(arr))
# 添加一个元素
arr.append(2)
<class 'list'>
# 访问数组中的元素
print("第1个元素:", arr[0])
print("第2个元素: ", arr[1])

print("倒数第1个元素", arr[-1])
print("倒数第2个元素", arr[-2])
第1个元素: 0
第2个元素:  10
倒数第1个元素 2
倒数第2个元素 12
# 添加元素之后的数组
arr
[0, 10, 12, 2]
# 在特定位置插入
arr.insert(2, 9)
arr
[0, 10, 9, 12, 2]
# 删除元素
# 删除最末尾的元素
arr.pop()
2
arr
[0, 10, 9, 12]
# 删除特定位置的元素
arr.pop(2)
9
arr
[0, 10, 12]
# 查找元素的位置
arr.index(10)
1
# 元素不存在
try:
    arr.index(100)
except ValueError:
    print("元素不存在")
元素不存在
# 查看是否有该元素,获取布尔值
100 in arr
False
arr = [1, 2, 3, 4, 5]
arr2 = [6, 7, 8, 9, 10]

# 数组拼接
arr += arr2
arr
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 获取子数组
arr[1:4]
[2, 3, 4]
arr[-4:-1]
[7, 8, 9]
# 获取从1到9的元素,隔一个取一个
# index 自增 2
arr[1:9:2]
[2, 4, 6, 8]
# 初始化一个长度为10的数组,长度为10, 初始值为0

# 方法1 简单的方法
# 注意 初始化二维数组的时候,不要使用该方法。

arr = [0] * 10
arr
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
#  方法2  for循环一个个append

arr = []
for i in range(10):
    arr.append(0)

arr
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# python的array还支持将不同类型的元素放在一起
# 跟C语言差别很大

arr = [1, 2.0, 's']
arr
[1, 2.0, 's']
# 二维数组

mat = [
    [1, 0, 0],
    [0, 1, 0],
    [0, 0, 1]
]

mat
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
# 获取行数
len(mat)
3
# 获取列数
len(mat[0])
3
# 这里需要强调的是, 在Python里二维数组,每一行的元素个数不固定
# 例如我们可以这么初始化数组

list2d = [[1, 2], [3, 4, 5], [2], 2, 0]

list2d
[[1, 2], [3, 4, 5], [2], 2, 0]

所以Python的List 动态数组类型是很灵活的。 如果你已经熟悉了C语言的刻板,在学习Python的时候, 可能会给你带来一些困扰。 随着你对Python的深入了解, 你会发现他给你带来的便捷。

Tuple

tuple 跟 list类似, 但是重大的区别在于tuple在声明之后,其值就不可以修改, 也不可以增加或者删除元素。

为什么会存在功能这么局限的数据类型呢, 原因就在于初始化的时候就确定了所有的元素,操作tuple数据类型的时候要比list快。 如果你定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用 tuple 。 你也可以对不需要修改的数据进行 “写保护”,可以使代码更安全。

我们在声明一个tuple类型的时候用的是(), 有别于List的方括号 []

a = (1, 2, 3)

type(a)
tuple
a
(1, 2, 3)
len(a)
3
# 如果你的tuple中只有一个元素 我们来试一下

a = (0)
a
0

可以看到我们这里的a变成了一个整数。 这里让python迷糊的地方就在于这个到底是运算符()还是tuple的声明

所以我们需要在数值后面加一个小逗号,

a = (1, )

print(type(a))
print(a)
<class 'tuple'>
(1,)

另外Listtuple可以相互转换

a = (1, 2, 3)

b = list(a)

b
[1, 2, 3]
a = tuple(b)

a
(1, 2, 3)
# 访问tuple中的某个元素 访问方式与数组相同

a[1]
2
# 子集也是tuple类型的数据
a[1:3]
(2, 3)
# 如果我们强行修改他的值得话就会报错
a[1]= 9
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-14-ddc4a9c349a0> in <module>()
      1 # 如果我们强行修改他的值得话就会报错
----> 2 a[1]= 9


TypeError: 'tuple' object does not support item assignment
Copyright 杭州云江科技有限公司 2017 all right reserved,powered by Gitbook该文件修订时间: 2018-04-02 09:53:14

results matching ""

    No results matching ""