(1)List
- Python内置的一种数据类型是列表list
- Python是动态语言,list可以包含各种数据类型
- list是一种有序的集合,可以随时添加和删除其中的元素
L = ['Adam', 95.5, 'Lisa', 85, 'Bart', 59]
print L
# 空list
empty_list = []
- 长度
L = ['Michael', 100, True]
len(L)
- 正序索引
L = [95.5,85,59]
print L[0]
print L[1]
print L[2]
print L[3]
- 倒序索引
L = [95.5, 85, 59]
print L[-1] #倒数第一
print L[-2] #倒数第二
print L[-3] #倒数第三
print L[-4] #倒数第四,越界报错
- append默认添加到尾部
>>> L = ['Adam', 'Lisa', 'Bart']
>>> L.append('Paul')
>>> print L
['Adam', 'Lisa', 'Bart', 'Paul']
- insert()
- 第一个参数是索引号,第二个参数是待添加的新元素:
>>> L = ['Adam', 'Lisa', 'Bart']
>>> **L.insert(0, 'Paul')**
>>> print L
['Paul', 'Adam', 'Lisa', 'Bart']
- pop(index)
- 不写默认删掉list的最后一个元素,并且它还返回这个元素,所以我们执行 L.pop() 后,会打印出 'Paul'。
- L.pop(1)删除指定位置
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> L.pop()
'Paul'
>>> print L
['Adam', 'Lisa', 'Bart']
>>> L.pop(1)
'Lisa'
>>> print L
['Adam', 'Bart']
- 反转
L = ['Adam', 'Lisa', 'Bart']
L.reverse()
print(L) # ['Bart', 'Lisa', 'Adam']
- 赋值
>>> L[2] = 'Paul'
>>> print L
L = ['Adam', 'Lisa', 'Paul']
>>> L[-1] = 'Paul'
- list和tuple快速赋值
a,b = [1,2]
c,d = (3,4)
print(a,b)
print(c,d)
# ValueError: too many values to unpack (expected 2)
# L = [1,2,3]
# e,f = L
(2)tuple
- tuple也是一种列表,但不可变,用小括号表示
>>> t = ('Adam', 'Lisa', 'Bart')
- tuple不可变,所有没有 append()、insert()、pop(),也不能被赋值成别的元素
>>> t[0] = 'Paul'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
- 空tuple
t = ()
print t # ()
- 单元素tuple
- ()既可以表示tuple,又可以表示运算时的优先级,(1)被解释成了整数1而不是单元素tuple(1)
- 有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,”,这样就避免了歧义:
>>> t = (1)
>>> print t
1
>>> t = (1,)
>>> print t
(1,)
- tuple不可变的理解
>>> t = ('a', 'b', ['A', 'B'])
>>> L = t[2]
>>> L[0] = 'X'
>>> L[1] = 'Y'
>>> print t
('a', 'b', ['X', 'Y'])
不是说tuple一旦定义后就不可变了吗?怎么现在又变了?
别急,我们先看看定义的时候tuple包含的3个元素:
当我们把list的元素'A'和'B'修改为'X'和'Y'后,tuple变为:
image.png表面上看,tuple的元素确实变了,但其实变的不是 tuple 的元素,而是list的元素。
tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
理解了“指向不变”后,要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。
网友评论