本文以Python3以上为学习基础。
目录
list (列表) 是中括号之间的一列逗号分隔的值。
这里tmp就是一个列表。
列表中的元素不是固定统一一个类型。
很明显列表里面有有int型,有字符串,还有布尔类型也就是(True、False)。
1、列表可以使用索引和切片。
正索引:
负索引:
注意:所有的切片操作都会返回一个包含请求的元素的新列表。
类似下面这种就是一种列表的拷贝:
切片:
正常的切片就是类似 tmp[1:3]。python中切片可以进行多次切片处理。
类似于上面的例子,第一步切片处理结果:['a','b',True]。
这时候的列表的下标变成了以下形式:
第二步切片处理获取的结果就是:[True]。
2、列表的连接
利用 + 号。
3、可以改变列表的某一个元素。
利用索引对你想改变的元素操作即可。
4、列表反转
方法一:tmp[::-1]
注意:这里可以看到。反转列表不是把原来的列表反转,这里创建了一个新的值,这个值和原来的列表内容是反的。
这个方法是不常用的,最常用的是下面的方法二。
方法二:函数reversed()
这里的 list(reversed(tmp)) 中的 list() 是指定为列表。
如果你不指定就是下面的结果:
具体原因后面详细说。
你也可以直接把某个列表反转。
5、列表的一些基本操作。
(1)列表长度:len()。
这个长度是指列表中的元素个数。
(2)列表元素重复:*
可以看到直接改变了列表的值。
(3)判断某个元素是否在列表中:in
结果就是True或者False。也就是在或者不在,布尔型。
(4)列表中最大或者最小的数字:最大:max()、最小:min()
这里分为两种情况:
情况一:列表的元素类型都是int类型。也就是全是数字。他们的最大最小就是数字最大或者最小。
即使你带上负数:
情况二:列表里面的元素不是int型的。按照字符在ASCII编码中所对应的数字进行比较的。
我们先看一部分ASCII码表。
下面获取最大和最小的字符:
(5)列表比较:cmp()
这个在Python 3 以上已经被取消了。
(6)追加元素:append()
追加相同类型还是不同类型都是可以的。
其实它还等同于以下方法:列表的最大长度(元素个数)到无穷大 = 你想追加的元素。
6、列表的函数
下面我们看看列表的函数有哪些。
dir(list)的结果就是list相关的函数。
我们先看前后不带下划线的函数:
append、count、extend、index、insert、pop、remove、reverse、sort
(1)append:追加元素。上面已经说过了。
(2)extend:将两个list合并、或者说是把一个列表追加到另一个列表后面。
注意:列表是可以修改的。但是它在本身基础上进行修改。所以,我们看到上例中tmp列表发生了改变。
(3)count:某个元素在该列表中出现多少次,也就是列表中的某个元素有多少个。
(4)index:检索某个元素在列表中的位置。
结果就是它的下标。
(5)insert:追加元素。和append() 不同的是,它可以在任何位置增加一个元素。
2的位置是下标的位置。
如果插入位置大于最大的下标呢?
在下标是999的位置追加字符串zxc
其实就会在最后追加。
(6)remove:删除某个元素。
如果这个元素不存在呢?
就会发生以下错误:
ValueError: list.remove(x): x not in list
如果有多个元素呢?
很明显,删除第一个元素。并且是对列表进行原地修改。
所以很明显我们要结合in操作(上面讲了,用于判断某个元素是否在列表中),随后再删除元素,非常合理。
(7)pop:也是删除某个元素。不过是通过下标(索引)取删除对应下标(索引)的元素。
和remove的区别在于:一个通过值去删除元素,一个通过下标(索引)去删除元素。
如果没有设置下标呢?
默认删除最后一个。
如果下标超过列表的最大值呢?
就会发生以下错误:
IndexError: pop index out of range
(7)reverse:反转列表元素。
(8)sort:列表排序。实现的是从小到大的排序。
如果是混合类型的列表?
会报错。
相同类型是可以的。
我们看到默认排序是从小到大排序,如果是从大到小呢?
你可以理解成,先从小到大排序,然后把它反转过来。
7、多维列表
对于多维列表的访问方法:
类似于上例中的:tmp[0][1]
[0]:先取横坐标的值,取得结果:[1,2,3]
[1]:在[0]取得的结果中看纵坐标。取得结果:2
8、字符串和列表的相互转换
split()函数和join()函数。
(1)split:以某个字符作为分割符,将字符串分割,随后放在列表中。(这句话是个人理解,可能不对)
当然,如果你用split()分割以后没有赋值给某个变量(上例中的tmp1),那么还是它本身字符串。
如果没有分割符呢?
可以看到并没有分割操作,直接把字符串放在列表中。
但是,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等都是分割符。
因此,你可以看看下面的例子。
可以看到,空格、换行(\n)、制表符(\t)都作为分割符进行分割。
上例中的\n被解析成换行符了,因此,变量tmp的结果在wo 的后面发生了换行。
还记得之前说过的 r (原始字符)吗?
如果我们加上原始字符呢?
很明显,所有的特殊字符(换行符(\n)、制表符(\t))都没有发生转义,只有空格仍然作为分割符,进行字符串分割,随后放在列表中。
(2)join:split的逆向操作。
上例中,利用 . 将列表中的所有元素连接起来。
为了方便阅读,我们再换成%试试。
以上是列表的相关知识,如果有错误,欢迎指正。