python list转置_没有学不会的python--复合类型(2)--进阶概念和列表

起步

前面有讲到复合类型的概念以及一些要素和掌握方法,还有元组的使用。但实际上来说,python实际开发过程中,真正用的多的是列表和字典,所以掌握了它俩,即使你说你不会元组不会集合都没有关系,当然这是不可能的,因为它们(元组、列表、字典、集合)彼此是相通的,基本上都可以举一反三。

在讲述列表、字典、集合之前,先了解下进阶概念。

复合类型中的进阶概念

可变对象与不可变对象

造成这个现象的原因是对象对内存的引用不是一成不变的。我们观察一个变量。肉眼可以看到的是它含有什么值,但对计算机来说,能看到的只是这个变量引用了哪个地址块。我们先通过一个小实验来简单了解一下。

# 我们可以通过id()来观察变量引用的还是不是同一个对象。a = 80print(id(a))a += 2print(id(a))b = 80print(id(b))

输出结果如下:

140712320003184140712320003248140712320003184

通过输出结果我们可以发现,对于a变量,它引用的对象不是一成不变的,从a=80到a=82,a所引用的对象已经发生了改变。对于b来说,我给它赋值了80,你会发现它引用的对象居然和a=80的时候引用的是同一个!

这是因为,一些比较常用的不可变对象,python不会立马回收它,而是会在内存中存放一段时间,这样当有其它变量再次引用这个对象的时候,就不用重新创建了,提高了效率。

所以总结出来,

可变对象是,变量所引用的对象不变的情况下,变量的值可以发生改变。

不可变对象是,变量所引用的对象不变的情况下,变量的值不可以改变。如果改变了变量的值,其实相当于改变了变量所引用的对象。

所以,都明白了不?

db8d9810883b40219446355dd0194f71

python中的可变对象和不可变对象。除了list,dict,set(即列表,字典,集合)之外,都是不可变对象。

好了,接着上菜,接下来上主菜。

dbec0ce325f24012af5dcc49809a3ab7

主菜来了--列表即list

列表是用的最多的一个数据类型,实际编程中,基本都不会少它的份,所以掌握好列表至关重要。

列表通常是由一个[ ]包裹起来的,它有以下特征:

  • 列表的元素不必都是同一种数据类型,可以都是整型,也可以部分元素是整型,部分元素是浮点型,部分元素是字符串...
  • 列表的元素可以是其它复合类型,比如列表里面可以包含元组,可以包含列表集合等
  • 列表的元素可以动态增加修改删除,不是固定的

列表有非常多的函数,但我们没必要都背下来,只需要实际看看,脑子里有印象列表可以做什么操作就行了。下图是列表常用到的一些函数,再次声明,不要去记这些函数,而是理解函数是干什么的。假设我们有一个列表变量叫做L。

  • L.append(x) 即在L的末尾添加x元素
  • L.count(x) 即在L中查找x出现的次数
  • L.extend(L1) 其中L1是一个列表,这个函数的意思是,将L1的元素全部添加到L中。
  • L.index(x) 查找x在L中的位置,如果有多个元素,返回第一个x所处的位置。
  • L.remove(x) 移除L中的x元素,如果x出现了多次,则移除第一个x。
  • L.reverse() 对L进行转置,即将列表中的元素倒过来。
  • L.insert(i,x) 将x插入到L中的第i位置中。

列表的初始化

# 列表的初始化# 空列表list_1 = []# 直接用[]包裹你要初始化的元素list_2 = [1, 2, 3, 'a', 45.55]# 将其它复合类型转换成列表list_3 = list((4, 5, 6))

列表的常用操作示例

# 列表的常用操作print("未执行操作前,list_2是这样的")print(list_2)# 在末尾添加元素print("在末尾添加元素")list_2.append("末尾")print(list_2)# 在指定位置添加元素print("在指定位置添加元素")list_2.insert(2, "指定位置")print(list_2)# 计算1在list_2中出现的次数print("计算1在list_2中出现的次数")print("1出现了{0}次".format(list_2.count(1)))# 查找1在list_2中第一次出现的位置print("查找1在list_2中第一次出现的位置")index = list_2.index(1)print("1在list_2中的下标是:{0}".format(index))

输出结果:

未执行操作前,list_2是这样的[1, 2, 3, 'a', 45.55]在末尾添加元素[1, 2, 3, 'a', 45.55, '末尾']在指定位置添加元素[1, 2, '指定位置', 3, 'a', 45.55, '末尾']计算1在list_2中出现的次数1出现了1次查找1在list_2中第一次出现的位置1在list_2中的下标是:0移除list_2中的1元素[2, '指定位置', 3, 'a', 45.55, '末尾']list_3的元素全部添加到list_2中[2, '指定位置', 3, 'a', 45.55, '末尾', 4, 5, 6]

除此之外,我们可能还需要对列表的子集进行操作。要对列表的自己进行操作,首先要懂切片,不懂的朋友麻烦翻翻我讲基本数据类型的那个文章。

这里提醒一些,切片的正确形式是[起始位置:终止位置:步长],当起始位置是列表的开头时,起始位置可以省略,当终止位置是列表的末尾时,终止位置也可以省略,当步长是1时,步长也可以省略。举几个例子。

  • [:]表示取列表的所有数据
  • [:3]表示取前3项
  • [::3]表示每隔3位取一个元素,即取出来的元素是原列表中的第一位,第四位,第七位,第十位...

子集操作

# 对列表的子集进行操作# 取list_2的前三个元素print(list_2[0:3])# 如果是从0开始,0可以省略print(list_2[:3])# 取list_2的后三个元素print(list_2[-3:])# 取list_2的全部元素print(list_2[:])# 取list_2的偶数项print(list_2[::2])

输出结果:

[2, '指定位置', 3][2, '指定位置', 3][4, 5, 6][2, '指定位置', 3, 'a', 45.55, '末尾', 4, 5, 6][2, 3, 45.55, 4, 6]

至此,集合的进阶概念以及列表我们都掌握了,剩下的字典和集合将在下一章讲解。如果你对我的系列文章感兴趣,可以关注我的公众号。

aa16cd718d554e74a4dfb79a0a467042

如果你有什么问题或建议,可加我聊。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值