Python随手笔记(五)------列表

本文目录

5.1列表数据类型

5.2 使用列表

5.3 增强赋值操作

5.4 方法

5.6 元组数据类型

5.7 引用

5.8 小结

5.1列表数据类型

“列表”是一个值,它包含多个字构成的序列。术语“列表值”指的是列表本身(它作为一个值,可以保存在变量中,或传递给函数,像所有其他值一样),而不是指列表值之内的那些值。
在交互式环境输入如下代码:
在这里插入图片描述
spam 变量仍然只被赋予一个值:列表值。但列表值本身包含多个值。[]是一
个空列表,不包含任何值,类似于空字符串
5.1.1用下标取得列表中的单个值
假定列表[‘cat’, ‘bat’, ‘rat’, ‘elephant’]保存在名为 spam 的变量中。Python 代码 spam[0]将求值为’cat’,spam[1]将求值为’bat’,依此类推。列表后面方括号内的整数被称为“下标”。列表中第一个值的下标是 0,第二个值的下标是 1,第三个值的下标是 2,依此类推。
如果使用的下标超出了列表中值的个数,Python 将给出 IndexError 出错信息。
下标只能是整数,不能是浮点值。否则将出现TypeError
列表也可以包含其他列表值。这些列表的列表中的值,可以通过多重下标来访
问,像下面这样:

spam =[[10,20],['a','b','c','d']]
>>>spam[0]
[10,20]
>>>spam[0][1]
20
>>>spam[1][3]
'd'

5.1.2负数下标
虽然下标从 0 开始并向上增长,但也可以用负整数作为下标。整数值−1 指的是
列表中的最后一个下标,−2 指的是列表中倒数第二个下标,以此类推。在交互式环境中输入以下代码:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[-1]
'elephant'
>>> spam[-3]
'bat'

5.1.3利用切片取得子列表
“切片”可以从列表中取得多个值,结果是一个新列表。切片输入在一对方括号中,像下标一样,但它有两个冒号分隔的整数。请注意下标和切片的不同。

  • spam[2]是一个列表和下标(一个整数)
  • spam[1:4]是一个列表和切片(两个整数)

下面的例子:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[0:4]
['cat', 'bat', 'rat', 'elephant'] 
>>> spam[1:3]
['bat', 'rat']

可以省略切片中冒号两边的一个下标或两个下标。省略第一个下标相当于使用 0,或列表的开始。省略第二个下标相当于使用列表的长度,意味着分片直至列表的末尾。
在这里插入图片描述
5.1.4用 len()取得列表的长度
len()函数将返回传递给它的列表中值的个数
在这里插入图片描述
5.1.5用下标可以改变列表中的值
5.1.6列表连接和列表复制
+操作符可以连接两个列表,得到一个新列表,*操作符可以用于一个列表和一个整数,实现列表的复制。
在这里插入图片描述
5.1.7用 del 语句从列表中删除值
del 语句将删除列表中下标处的值,表中被删除值后面的所有值,都将向前移
动一个下标。
在这里插入图片描述

5.2 使用列表

使用列表的好处在于,现在数据放在一个结构中,所以程序能够更灵活的处理
数据,比放在一些重复的变量中方便。
5.2.1 列表用于循环
在这里插入图片描述
在前面的循环中使用 range(len(supplies))很方便,这是因为,循环中的代码可以访问下标(通过变量 i),以及下标处的值(通过 supplies[i])。最妙的是,range(len(supplies))将迭代 supplies 的所有下标,无论它包含多少表项。
5.2.2 in 和 not in 操作符
利用 in 和 not in 操作符,可以确定一个值否在列表中。像其他操作符一样,in
和 not in 用在表达式中,连接两个值:一个要在列表中查找的值,以及待查找
的列表。这些表达式将求值为布尔值。
在这里插入图片描述
5.2.3 多重赋值技巧
多重赋值技巧是一种快捷方式,让你在一行代码中,用列表中的值为多个变量
赋值。下面这个例子很好的说明了这个问题:

>>> list = ['王文宏','男','11']
>>> name,sex,age = list
>>> print('name:'+name+' '+'sex:'+sex+' '+'age:'+age)
name:王文宏 sex:男 age:11

看看看看,是不是方便了很多,否则就需要一个一个的挨个赋值,节省了代码量。

5.3 增强赋值操作

在对变量赋值时,常常会用到变量本身。

>>> num = 42
>>> num = num+1
>>> num
43
增强的赋值运算符 等价的赋值语句
num+=1 num=num+1
num-=1 num=num-1
num*=1 num=num*1
num/=1 num=num/1
                       表 4-1 增强的赋值操作符

5.4 方法

5.4.1用 index()方法在列表中查找值
列表值有一个 index()方法,可以传入一个值,如果该值存在于列表中,就返回它
的下标。如果该值不在列表中,Python 就报 ValueError。

>>> list = [3,2,1,5,7]
>>> list.index(2)
1
>>> list.index(8)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 8 is not in list

如果列表中存在重复的值,就返回它第一次出现的下标。
5.4.2用 append()和 insert()方法在列表中添加值
append和insert的区别是append直接将传入的参数加到列表的最后,而insert可以传入两个参数,第一个参数表明数字要插入的位置,第二个参数是将要插入的具体数字或字符。下面的例子很好的说明了两个函数的具体使用方法。

>>> list = [1,5,3,4,2]
>>> list.append(6)
>>> list
[1, 5, 3, 4, 2, 6]
>>> list.insert(1,3)
>>> list
[1, 3, 5, 3, 4, 2, 6]

5.4.3用 remove()方法从列表中删除值

  • 给 remove()方法传入一个值,它将从被调用的列表中删除。
  • 试图删除列表中不存在的值,将导致 ValueError 错误。
  • 如果该值在列表中出现多次,只有第一次出现的值会被删除。
  • 如果知道想要删除的值在列表中的下标,del 语句就很好用。
>>> list = [1,3,4,3,2]
>>> list.remove(3)
>>> list
[1, 4, 3, 2]
>>> del(list[0])
>>> list
[4, 3, 2]
>>> list.remove(6)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list

5.4.4用 sort()方法将列表中的值排序
数值的列表或字符串的列表,能用 sort()方法排序。

>>> list = [7,4,2,5,3,1]
>>> list.sort()
>>> list
[1, 2, 3, 4, 5, 7]

也可以倒序排序

>>> list = ['a','h','j','d','z']
>>> list.sort(reverse = True)
>>> list
['z', 'j', 'h', 'd', 'a']

不能对既有数字又有字符串值的列表排序,因为 Python 不知道如何比较
它们,所以会报错。
sort()方法对字符串排序时,使用“ASCII 字符顺序”,而不是实际的字典顺序。这意味着大写字母排在小写字母之前。如果需要按照普通的字典顺序来排序,就在 sort()方法调用时,将关键字参数key 设置为 str.lower。

>>> list = ['a','h','A','z','H','Z']
>>> list.sort(key = str.lower)
>>> list
['a', 'A', 'h', 'H', 'z', 'Z']

5.5.1可变和不可变数据类型
列表是“可变的”数据类型,它的值可以添加、删除或改变。但是,字符串是“不可变的”,它不能被更改。尝试对字符串中的一个字符重新赋值,将导致 TypeError 错误。
“改变”一个字符串的正确方式,是使用切片和连接。构造一个“新的”字符
串,从老的字符串那里复制一些部分。

>>> name = 'wangdalian is a good boy'
>>> name = 'wangwenhong'
>>> new = name[0:7]+'a'+name[8:12]
>>> name
'wangwenhong'
>>> new
'wangwenaong'

5.6 元组数据类型

“元组”数据类型几乎与列表数据类型一样。首先,元组输入时用圆括号(),而不是用方括号[]。

>>> list = ('hello',1,4,'l',9)
>>> list[0]
'hello'
>>> list[1:]
(1, 4, 'l', 9)
>>> len(list)
5

5.6.2用 list()和 tuple()函数来转换类型
函数 list()和 tuple()将返回传递给它们的值的列表和元组版本。

>>> tuple(['cat', 'dog', 5]) 
('cat', 'dog', 5)
>>> list('hello')
['h', 'e', 'l', 'l', 'o']

5.7 引用

以前我们见到的储存数值一般的方法是这样

>>> spam =100
>>> new = spam
>>> spam =101
>>> new
100
>>> spam
101

但是在列表中并不是这样:

>>> spam = [0, 1, 2, 3, 4, 5] 
>>> cheese = spam 
>>> cheese[1] = 'Hello!' 
>>> spam
[0, 'Hello!', 2, 3, 4, 5]
>>> cheese
[0, 'Hello!', 2, 3, 4, 5]

当创建列表时,你将对它的引用赋给了变量。但下一行只是将 spam 中的列表引用拷贝到 cheese,而不是列表值本身。这意味着存储在 spam 和 cheese 中的值,现在指向了同一个列表。底下只有一个列表,因为列表本身实际从未复制。所以当你修改 cheese 变量的第一个元素时,也修改了 spam 指向的同一个列表。
5.7.2copy 模块的 copy()和 deepcopy()函数
在处理列表和字典时,尽管传递引用常常是最方便的方法,但如果函数修改了
传入的列表或字典,你可能不希望这些变动影响原来的列表或字典。要做到这一点,Python 提供了名为 copy 的模块,其中包含 copy()和 deepcopy()函数。第一个函数copy.copy(),可以用来复制列表或字典这样的可变值,而不只是复制引用。

>>> import copy
>>> list = ['a','b','c','d']
>>> new = copy.copy(list)
>>> list[1] = 24
>>> list
['a', 24, 'c', 'd']
>>> new
['a', 'b', 'c', 'd']

如果要复制的列表中包含了列表,那就使用 copy.deepcopy()函数来代替。

5.8小结

列表是有用的数据类型,因为它们让你写代码处理一组可以修改的值,同时仅
用一个变量。列表是可变的,这意味着它们的内容可以改变。元组和字符串虽然在某些方面像列表,却是不可变的,不能被修改。变量不直接保存列表值,它们保存对列表的“引用”。在复制变量或将列表作为函数调用的参数时,这一点很重要。因为被复制的只是列表引用,所以要注意,对该列表的所有改动都可能影响到程序中的其他变量。如果需要对一个变量中的列表修改,同时不修改原来的列表,就可以用 copy()或 deepcopy()。

发布了37 篇原创文章 · 获赞 42 · 访问量 4526

猜你喜欢

转载自blog.csdn.net/qq_43337175/article/details/104193380