Python的xiao习07-基础知识4,tuple&list

127 阅读6分钟

list

Python内置的数据类型:list,list是一种有序的集合,可以随意添加和删除其中的元素。
比如,列出公司所有员工的名字,就可以用一个list表示:

emps = ['张三','李四','王五']

list内的元素也可以数据类型不一致,比如:

zhangsan = ['张三',18,'男',True]

list内的元素甚至可以存放list,比如:

emps = ['第一组',['张三',18,'男'],['李四',19,'男'],['王五',18,'女']]

注意:list内嵌套list,会把内部的list当做一个元素来看待,所以emps.len()的结果是4
我们如果要取出内部list的指定元素只需要这样写:

print(emps[1][2])  #输出结果:18

第一个[]代表了外部list的第几个元素,如果这个元素也是一个list我们就可以继续往后写[],表示获取当前内部list中第几个元素

变量emps就是一个list。用函数len()可以获得list元素的个数,也叫当前变量emp的长度:

len(emps)
print(len(emps))  #输出结果:3

如果是一个空的list那么表示当前list中一个元素也没有,当前list的长度就是0:

L = list[]
print(len(L))  #输出结果:0

用索引来访问list中每一个位置的元素,索引是从0开始的
还是使用上边的emps举例:

当前个数 元素 对应下标
第一个值 张三 0
第二个值 李四 1
第三个值 王五 2

访问list制定元素方法:当前list名字[元素下标]:

print(emps[0])  #输出结果:张三
print(emps[1])  #输出结果:李四
print(emps[2])  #输出结果:王五

还有一种经常会遇到的报错信息:

print(emps[3])

当索引超出范围时,Python汇报一个IndexError错误,所以,确保索引不会越界,记得最后一个元素的大小,永远是len(emps)-1
如果想取当前list最后一个值、又不知道list的长度的时候,不需要去写什么len(list名字)-1 ,直接用-1这个索引,就可以获取最后一个元素

print(emps[-1])  #输出结果:王五

以此类推,倒数第二个,倒数第三个:

print(-2) #输出结果:李四
print(-3) #输出结果:张三

同样,超出list长度的时候,就会报错

添加

list是一个可变的有序集合,所以,我们可以往list中添加元素: 两种方式,一种是末尾追加(排队),另一种是制定下表位置追加(插队)

  1. 末尾追加元素:list.append('追加元素')
    把元素追加到当前list的最后一位,跟排队的形式很像,还是用emps举例
emps = ['张三','李四','王五']
print(emps)  #输出结果:['张三', '李四', '王五']

emps.append('赵六')
print(emps)  #输出结果:['张三', '李四', '王五', '赵六']
  1. 指定位置追加元素:list.insert(指定下标位置,'插入元素')
    把元素插入到指定位置,好比插队,直接不管顺序,在自己想在的地方插进去(生活中不建议插队,容易被打死)
emps = ['张三','李四','王五']
print(emps)  #输出结果:['张三', '李四', '王五']

emps.insert(1,'赵六')
print(emps)  #输出结果:['张三', '赵六', '李四', '王五']
删除

删除也可以做到,删除末尾元素和删除指定元素

  1. 删除末尾元素:list.pop()
emps = ['张三','李四','王五']
emps.pop()
print(emps)  #输出结果:['张三','李四']
  1. 删除指定元素:list.pop(元素下标)
emps = ['张三','李四','王五']
emps.pop(1)
print(emps)  #输出结果: ['张三','王五']
替换

如果想要替换某个元素的值,直接给对应索引的元素赋值即可替换:

emps = ['张三','李四','王五']
emps[1]='赵四'
print(emps) #输出结果:['张三','赵四','王五']

tuple

另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同事的名字:

emps = ('张三','李四','王五')

emps这个tuple已经定义完成、从此刻开始,这个tuple就不能再被修改了,没有append()也没有insert()。 元组内元素的获取还是可以正常使用的比如emps[0],emps[-1],这些都没有问题,只是不能修改或者删除元素。 如果你使用emps[0] = zs,就会报错。
如果不可修改,tuple的意义:
因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

如果要定义一个空的tuple的时候,可以这么写

emps = ()
print(emps)  #输出结果:()

如果你想定一个tuple,里面只存放一个整型的数字,就会产生歧义。本身定义tuple使用的是(),和数学运算中的(),冲突,无法准确的知道是一个tuple,还是一个数字
所以当我们定义一个只有一个数字的tuple的时候我们需要这么写:

numbers = (1,)

print(numbers) #输出结果:(1,)

Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。

可变tuple

emps = (1,2,[11,22,33])

这种情况下修改list里面的元素,无论是增、删、改,都是没有问题的。
tuple中说的元素不可变,指的是tuple中的每个元素的指向不能变,指向a,a永远不能改变,而指向一个list,就不能改为其他对象,但是list里的内容的改变是没有关系的。

举个栗子

一个公司的创始人强制要求,一共只能有三个部门,而且部门的名字不能改变办公位置不能改变,但里面的人员你怎么动公司却没有规定。
公司里的部门就好比,tuple中的list,指向不变(部门名字不变,办公位置不能改变)但是里边的内容还是list该有的内容,可以进行增、删、改。
如果把创始人信息也放到当前的tuple中,他就是tuple中的一个普通的元素,永远不可以改变。

小结

  1. list:
    是一个有序的集合,里面可以放任意内容的数据 可以增加append(),insert()
    删除pop()
    修改list1[0] = 123
    嵌套list
  2. tuple 有序的集合,元素不可变(元素指向),可以查询,无法增加、删除、修改
    优点:代码更安全。尽可能用tuple代替list使用。
    缺点:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来
  3. 可变tuple 在tuple中嵌套一个list,利用tuple只是指向不变的这一特征做到可变tuple。