首页 > 代码库 > python基础9 列表,元组操作
python基础9 列表,元组操作
本节内容:
1 列表
2 元组
3 参考网页
列表
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作。
定义列表
names = [‘Michael‘, ‘Bob‘, ‘Tracy‘]
访问列表
通过索引访问
通过下标访问列表中的元素,下标从0开始计数。 使用索引时,千万注意不要越界。
>>> names[0]
‘Michael‘
>>> names[2]
‘Tracy‘
倒序访问
千万注意不要越界。
>>> names[-1] ] #倒着取,倒数第一个
‘Tracy‘
>>> names[-2] #倒着取,倒数第二个
‘Bob‘
切片:访问多个元素
name = ["cathy","jack","jerry","lucy","lily","carry","abby"]
names[1:4] #取下标1至下标5之间的数字,包括1,不包括4
[‘jack‘, ‘jerry‘, ‘lucy‘,‘lily‘]
names[1:-1] #取下标1至-1的值,不包括-1
[‘jack‘,‘jerry‘,‘lucy‘,‘lily‘,‘carry‘]
names[0:3]
[‘cathy‘,‘jack‘,‘jerry‘]
names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
[‘cathy‘,‘jack‘,‘jerry‘]
names[3:] #如果想取最后一个,必须不能写-1,只能这么写
[‘lucy‘,‘lily‘,‘carry‘,‘abby‘]
names[3:-1] #这样-1就不会被包含了
[‘lucy‘,‘lily‘,‘carry‘]
names[0::2] #后面的2是代表,每隔一个元素,就取一个
[‘cathy‘, ‘jerry‘, ‘lily‘,‘abby‘]
names[::2] #和上句效果一样
[‘cathy‘, ‘jerry‘, ‘lily‘,‘abby‘]
追加
names = ["cathy","jack","jerry","lucy","lily","carry","abby"]
names.append("我是新来的")
print(names)
结果:
[‘cathy‘, ‘jack‘, ‘jerry‘, ‘lucy‘, ‘lily‘, ‘carry‘, ‘abby‘, ‘我是新来的‘]
插入
names = ["cathy","jack","jerry","lucy","lily","carry","abby"]
names.insert(2,"强行从2索引位置插入数据")
print(names)
结果:
[‘cathy‘, ‘jack‘, ‘强行从2索引位置插入数据‘, ‘jerry‘, ‘lucy‘, ‘lily‘, ‘carry‘, ‘abby‘]
修改
names = ["cathy","jack","jerry","lucy","lily","carry","abby"]
names[2] = "索引为2的位置修改"
print(names)
结果:
[‘cathy‘, ‘jack‘, ‘索引为2的位置修改‘, ‘lucy‘, ‘lily‘, ‘carry‘, ‘abby‘]
删除
- 例1 del
names = ["cathy","jack","jerry","lucy","lily","carry","abby"]
del names[2] #delete索引为2的元素
print(names)
结果:
[‘cathy‘, ‘jack‘, ‘lucy‘, ‘lily‘, ‘carry‘, ‘abby‘]
- 例2 remove()
names = ["cathy","jack","jerry","lucy","lily","carry","abby"]
names.remove("jack") #删除指定元素
print(names)
结果:
[‘cathy‘, ‘jerry‘, ‘lucy‘, ‘lily‘, ‘carry‘, ‘abby‘]
- 例3 pop()
names = ["cathy","jack","jerry","lucy","lily","carry","abby"]
names.pop() #删除列表最后一个值"abby"
print(names)
结果:
[‘cathy‘, ‘jack‘, ‘jerry‘, ‘lucy‘, ‘lily‘, ‘carry‘]
pop()方法总是删掉list的最后一个元素
#删除jerry
names = ["cathy","jack","jerry","lucy","lily","carry","abby"]
names.pop(2) #删除列表索引为2的值
print(names)
结果:
[‘cathy‘, ‘jack‘, ‘lucy‘, ‘lily‘, ‘carry‘, ‘abby‘]
names.pop(3) IndexError: pop index out of range
扩张
names = ["cathy","jack","jerry","lucy","lily","carry","abby"]
b = [1,2,3]
names.extend(b)
print(names)
结果:
[‘cathy‘, ‘jack‘, ‘jerry‘, ‘lucy‘, ‘lily‘, ‘carry‘, ‘abby‘, 1, 2, 3]
统计
names = ["cathy","lily","jerry","lucy","lily","carry","abby"]
cnum = names.count("lily")
print(cnum)
结果: 2
排序
- 例1
names = ["cathy","jack","jerry","lucy","lily","carry","abby"]
names.sort() #排序
print(names)
结果:
[‘abby‘, ‘carry‘, ‘cathy‘, ‘jack‘, ‘jerry‘, ‘lily‘, ‘lucy‘]
- 例2
names = ["cathy","jack","jerry",1,2,3]
names.sort() #排序
print(names)
结果会报如下的错误:
names.sort() #排序
TypeError: unorderable types: int() < str()
- 例3
names = ["cathy","jack","jerry","1","2","3"]
names.sort()
print(names)
结果:
[‘1‘, ‘2‘, ‘3‘, ‘cathy‘, ‘jack‘, ‘jerry‘]
列表的排序按asii顺序排序。
反转
names = ["cathy","jack","jerry","1","2","3"]
names.reverse() #反转
print(names)
结果:
[‘3‘, ‘2‘, ‘1‘, ‘jerry‘, ‘jack‘, ‘cathy‘]
获取下标
names = ["cathy","lily","jerry","lucy","lily","carry","abby"]
nid = names.index("lily") #只返回找到的第一个下标
print(nid)
结果: 1
拷贝
Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的。
对象赋值
在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。 当对对象做赋值或者是参数传递或者作为返回值的时候,总是传递原始对象的引用,而不是一个副本。
list = ["cathy","jack","jerry",["bruce","85"]]
b=list
list.append(5)
list[3].append("75")
print(list)
print(b)
结果:
[‘cathy‘, ‘jack‘, ‘jerry‘, [‘bruce‘, ‘85‘, ‘75‘], 5]
[‘cathy‘, ‘jack‘, ‘jerry‘, [‘bruce‘, ‘85‘, ‘75‘], 5]
原始列表改变,被赋值的b也会做相同的改变。
浅拷贝
copy浅拷贝,没有拷贝子对象,所以原始数据改变,新copy的子对象会改变。
import copy
list = ["cathy","jack","jerry",["lily","100"]]
c=copy.copy(list)
print(list,c)
list.append(5)
print(list,c)
list[3].append(‘99‘)
print(list)
print(c)
结果:
[‘cathy‘, ‘jack‘, ‘jerry‘, [‘lily‘, ‘100‘]] [‘cathy‘, ‘jack‘, ‘jerry‘, [‘lily‘, ‘100‘]]
[‘cathy‘, ‘jack‘, ‘jerry‘, [‘lily‘, ‘100‘], 5] [‘cathy‘, ‘jack‘, ‘jerry‘, [‘lily‘, ‘100‘]]
[‘cathy‘, ‘jack‘, ‘jerry‘, [‘lily‘, ‘100‘, ‘99‘], 5]
[‘cathy‘, ‘jack‘, ‘jerry‘, [‘lily‘, ‘100‘, ‘99‘]] #里面的子对象被改变了
names = ["cathy","lily","jerry",["abby","95"]]
name_copy = names.copy()
names.append("bruce")
names[3].append("60")
print(name_copy)
print(names)
结果显示:
[‘cathy‘, ‘lily‘, ‘jerry‘, [‘abby‘, ‘95‘, ‘60‘]]
[‘cathy‘, ‘lily‘, ‘jerry‘, [‘abby‘, ‘95‘, ‘60‘], ‘bruce‘]
深拷贝
深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变。
import copy
names = ["cathy","lily","jerry",["abby","95"]]
d=copy.deepcopy(names)
print(names)
print(d)
names.append("jack")
names[3].append("70")
print(names)
print(d)
结果显示:
[‘cathy‘, ‘lily‘, ‘jerry‘, [‘abby‘, ‘95‘]]
[‘cathy‘, ‘lily‘, ‘jerry‘, [‘abby‘, ‘95‘]]
[‘cathy‘, ‘lily‘, ‘jerry‘, [‘abby‘, ‘95‘, ‘70‘], ‘jack‘]
[‘cathy‘, ‘lily‘, ‘jerry‘, [‘abby‘, ‘95‘]] #始终没有改变
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
它只有2个方法,一个是count,一个是index,完毕。
names = ("cathy","jack","lucy","cathy")
nid = names.index("cathy")
ncnum = names.count("cathy")
print(nid)
print(ncnum)
结果:
0
2
参考网页
http://www.cnblogs.com/alex3714/articles/5717620.html
http://www.imooc.com/code/3355
http://blog.csdn.net/lixintong1992/article/details/51005546
http://www.cnblogs.com/kellyseeme/p/5525067.html
http://www.cnblogs.com/xueli/p/4952063.html
http://python.jobbole.com/82294/
python基础9 列表,元组操作