Python中的列表,元组,字典

1.序列:序列的概念

包含若干个元素,元素有序排列,可以通过下标来访问一个或者多个元素,这样的对象,Python就统一称为序列(Sequence)。

Python中以下的对象都属于序列。

》字符串

》列表

》元组

同是序列,他们的使用方式有很多相同之处。

序列类型操作符

》in/not in :判断一个元素是否存在于序列之中,返回布尔值

连接操作符(+);把两个相同类型的序列进行连接。(连接操作符的往往并不高效(创建新对象,把原有的对象拷贝出去),对于列表,推荐使用extend来完成这样的操作;对于字符串,推荐使用join这样的操作)

2.列表和元组类似于C语言中的数组。

使用[]来表述列表,使用()来表示元组。列表和元组能够保存任意数量,任意类型的Python对象。可以使用下标来访问里面的元素,下标从0开始,最后一个下标为-1,可以使用[:]切片操作得到列表或者元组的子集,这个动作和字符串操作是一样的。列表和元素唯一的区别是,列表中的元素可以修改,但元组中的元素不可以修改(同样不可以改的还有string )。(另外,对于切片语法来说,下标越界也没有关系,因为取得是前闭后开区间,区间中的元素,能取多少取多少。)

切片操作的扩展[::],除了可以表示子序列的起始和结束位置,还可以表示‘步长’

如下例子

下面是一个更有趣的例子

字符串的翻转

(1)列表的详细用法

使用for循环将生成的值放在一个列表中

还可以搭配使用if 

下面我们用列表实现一个栈和队列

队列

关于列表的深浅拷贝

有下面这样一个例子

首先可以从结果中看到b和a 其实是同一个对象,而d,c 已经是新的列表对象了。

修改a[0]可以看到,a和b的值不受影响,但是d,c不受影响

再修改a[3][0]这时候可以发现c,d 的内容也收到了影响。

我们打印出a[3][0]的ID。可以发现其实是同一个对象,打印出id 证明了我们的猜想。

我们可以得出结论:

列表的赋值(=),切片操作([:]),list工厂函数,都在进行浅拷贝。

浅拷贝是指,虽然我重新的创建出了一个新对象,但新对象里面包含的子对象,和原来的子对象是同一个对象。

相应的深拷贝就是指,重新创建了一个新对象,同时这个新对象的子对象,也是重新创建出的一份新的拷贝对象。

 

 

如果我们要避免其中一份数据修改,会影响到其他数据的结果。我们就要用深拷贝。可以调用函数b=copy.deepcopy(a)这时b就是a 的深拷贝。(不只针对于列表)

注意:不是调用就一定会执行深拷贝,解释器会自己判断,如根本就不可能修改的就不会进行深拷贝。

(2)关于元组不可变得深层理解

不可变指的是元组的子对象的标识不可以变,如果元组中有可变元素,那么可变元素就是可变的

忘记打print a

为什么列表不可以替代元组呢?

1,当不想把数据搞乱时,元组会更安全。

2.在字典中Key必须是不可变得,所以必须是元组。

2.字典

Python中的映射数据类型,存储键值对,存储键值对(key-value),几乎所有类型的python对象都可以用作键,不过一般还是数字和字符串最常用,字典用{}表示字典。

上面就是基本的使用方法

下面是一种常用的构造字典的方法

首先要介绍一个函数zip,这个函数的功能可以看下面的例子

可以看到,事实上zip可以理解成矩阵的行列变换。

这样一个字典就完成了。

                           

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值