您的位置:首页 > 编程语言 > Python开发

菜鸟学python之list和tuple

2017-09-19 16:53 106 查看
list
list 是一种有序的集合,可以随时添加和删除其中的元素。list是一种对象,当我们在创建变量,并且赋值的过程可以理解成这样
shopping=['apple','orange']
1)创建一个list对象,对象里面同时也有很多变量名;
2)[0]位置变量存储'apple'对象的地址,[1]位置变来那个存储'orange'对象地址
3)创建一个shopping变量,存储list对象的地址信息;
list常用操作
1访问元素
1.1用索引来访问 list 中每一个位置的元素,记得索引是从 0 开始的
>>> shopping=['apple','orange']
>>> shopping[0]
'apple'
>>> shopping[1]
'orange'
>>> shopping[2]
Traceback (most recent call last):
File "<pyshell#98>", line 1, in <module>
shopping[2]
IndexError: list index out of range
因此通过索引访问元素一定要记得不能越界,不然就会发生错误。有两种更好的方法访问最后一个元素
>>> shopping[len(shopping)-1]    #先计算长度,再减一
'orange'
>>> shopping[-1]           #默认从后往前计数
'orange'
1.2索引访问list中子list的元素
['apple', 'orange', ['r', 'u']]
>>> shopping[2]
['r', 'u']
>>> shopping[2][1]
'u'
可以理解成shopping变量找到了['apple', 'orange', ['r', 'u']]对象
shopping[2]是存在于对象中用来存储['r','u']对象的地址的变量
shopping[2]此时找到了['r','u']shopping[2][0]就是['r','u']对象中存储'r'地址的变量
2 增加元素

2.1 append从尾部插入
>>> shopping.append('banana')
>>> shopping
['apple', 'orange', 'banana']
2.2 insert指定位置插入
>>> shopping.insert(1,'banana')    #指定位置,前面的数字代表插入后元素所在位置
>>> shopping
['apple', 'banana', 'orange', 'banana']
>>> id(shopping[1])
43203456
>>> id(shopping[3])        #可以看出,插入同一个值时,没有增加新对象,只是引用了源地址
43203456
2.3 extend从尾部插入多个元素
>>> shopping.extend([7,8])
>>> shopping
['apple', 7, 8]
3 删除元素

3.1 pop弹出
>>> shopping.pop()  #按顺序删除,不需要指定具体对象
'banana'
>>> shopping
['apple', 'banana', 'orange']
>>> shopping.pop(1)  #也可以指定位置,必须使用索引号
'banana'
>>> shopping.pop(-1)
'orange'
>>> shopping
['apple']
3.2 remove指定内容删除
>>> shopping
['apple', 7, 8]
>>> shopping.remove(7)
>>> shopping
['apple', 8]
3.3 del删除
del是一个语句,不是一个列表的方法。可以删list对象中的变量,也可以删除list的变量
>>> del shopping[1]
>>> shopping
['apple']
>>> del shopping
>>> shopping
Traceback (most recent call last):
File "<pyshell#126>", line 1, in <module>
shopping
NameError: name 'shopping' is not defined
tips:这三种删除方法,都可以删除list对象中的变量,即使list对象中也有子列表;但是只有del可以删除进行操作的对象变量;
3.4 修改元素
直接使用赋值法
>>> shopping[1]=2
>>> shopping
['apple', 2, 8]
tuple
tuple 一旦初始化就不能修改,比如同样是列出shopping的物品单:
>>> shopping=('apple','orange')
>>> shopping
('apple', 'orange')
现在,shopping 这个 tuple 不能变了,它也没有 append(),insert()这样的方法。其他获取元素的方法和 list 是一样的,你可以正常地使用shopping[0] , shopping[-1] ,但不能赋值成另外的元素。
不可变的 tuple 有什么意义?因为 tuple 不可变,所以代码更安全。如果可能,能用 tuple 代替 list 就尽量用 tuple
tips:

只有 1 个元素的 tuple 定义时必须加一个逗号 , ,来消除歧义:
>>> t=(1)
>>> t
1
>>> t = (1,)
>>> t
(1,)
Python 在显示只有 1 个元素的 tuple 时,也会加一个逗号 , ,以免你误解成数学计算意义上的括号

之前提到过tuple是不可变对象
>>> shopping[1]=(2)
Traceback (most recent call last):
File "<pyshell#149>", line 1, in <module>
shopping[1]=(2)
TypeError: 'tuple' object does not support item assignment 对象不支持赋值
tuple对象中的用来存储地址的变量名一旦固定就不能改变,当我们尝试赋值一个不可变对象给tuple内部变量时就会发生错误;那是不是赋值一个可变对象,就可以改变元素的值呢
>>> t=('a','b',['a','b'])
>>> t
('a', 'b', ['a', 'b'])
>>> id(t[2][1])
6326368
>>> id(t[1])   #t[1]和['a','b']对象中的[1]引用同一个对象 'b'
6326368
>>> t[2][0]='x'
>>> t
('a', 'b', ['x', 'b'])



小结
不可变对象内部变量不可变
改变的其实是可变list对象中的元素,而tuple中指向list的地址没有发生改变,有点类似于系统编程中操作系统实现不一样,但是给上层提供的api是一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python