python进阶:列表的高级特性

前面我们学过了列表的一些简单的特性,本期我们介绍列表的高级操作:切片、内置函数、列表推导式。有了函数的基础,本期的知识相信大家就不难理解了。

切片

切片实际上是对列表进行截取的操作,它需要使用英文冒号,两边分别是起始的元素编号。

>>> list = [11, 22, 33, 44, 55]

# 截取序号为1~3的元素,以列表的形式返回
>>> list[1:4]
[22, 33, 44]

# 截取序号为3到结束的所有元素,以列表的形式返回
>>> list[3:]
[44, 55]

# 截取序号为0~2的所有元素,以列表的形式返回
>>> list[:3]
[11, 22, 33]

# 不进行截取操作,返回完整的列表
>>> list[:]
[11, 22, 33, 44, 55]

# 可以用slilce()方法来获取特定的编号

# 获取序号0~3,注意步长为2,表示每2个元素中取1个元素
# 实际上只获取到序号为0和2的元素
s1 = slice(0,4,2)
>>> list[s1]
[11, 33]

# 步长的默认参数是1,默认参数在《函数2》中讲过
s2 = slice(0,4)
>>> list[s2]
[11, 22, 33, 44]

列表操作方法

python内置了一些处理列表的方法:

# 列表的各种操作方法示例:

# 初始的列表
>>> list = [11, 22, 33, 44, 55]

# 使用append()在列表尾部增加一个元素
>>> list .append(66)
>>> print(list)
[11, 22, 33, 44, 55, 66]

# 使用extend()方法在列表尾部拼接另一个列表
>>> list.extend([55, 44, 33, 22, 11])
>>> print(list)
[11, 22, 33, 44, 55, 66, 55, 44, 33, 22, 11]

# 使用insert()方法在序号为6的位置插入一个元素77,
# 原来序号大于等于6的元素,序号全部加1,低于6的元素不变
>>> list.insert(6, 77)
>>> print(list)
[11, 22, 33, 44, 55, 66, 77, 55, 44, 33, 22, 11]

# 使用remove()方法删除第一个值为77的元素
>>> list.remove(77)
>>> print(list)
>>> print(list)
[11, 22, 33, 44, 55, 66, 55, 44, 33, 22, 11]

# 使用pop()方法删除列表中序号为5的元素,注意pop和remove的区别[1]
>>> list.pop(5)
>>> print(list)
>>> print(list)
[11, 22, 33, 44, 55, 55, 44, 33, 22, 11]
# 直接使用list.pop(),默认删除最后一个元素,
# 利用append()和pop()可以实现堆栈的push()和pop()的功能

# 清除列表中的所有元素
>>> list.clear()
>>> print(list)
[]

list = [11, 22, 33, 44, 55, 66, 55, 44, 33, 22, 11]
# 返回第一个值为44的元素的序号
>>> list.index(44)
3

# 统计值为44的元素的个数
>>> list.count(44)
2

# 为列表排序,从小到大,
>>> list.sort()
>>> print(list)
[11, 11, 22, 22, 33, 33, 44, 44, 55, 55, 66]
>>> list_2 = [2,21,223,'BCc','B', 'bc' ,'a']
>>> list_2.reverse()
>>> print(list_2)
['a', 'bc', 'B', 'BCc', 223, 21, 2]

# 将列表元素的顺序颠倒
>>> list.reverse()
>>> print(list)
[66, 55, 55, 44, 44, 33, 33, 22, 22, 11, 11]

# 返回列表的浅复制
>>> list.copy()
[66, 55, 55, 44, 44, 33, 33, 22, 22, 11, 11]

二维列表

python中是没有二维列表这个概念的,下面要说的二维列表本质上还是一维列表,只不过这个一维列表的元素都是一维列表。因此,一维列表的性质,二维列表都具备。之所以介绍二维列表,是因为某些情况下引入二维列表这个概念会使问题简化。

# 创建一个空二维列表
>>> list = [[]]

# 二维列表的元素都是列表,想获取元素需要取两次索引
>>> list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> print(list[0])
[1, 2, 3]
>>> print(list[0][0])

列表推导式

使用表达式来处理列表中的每一个元素,生成一个新的列表,这就是列表推导式[2]。前面我们在匿名函数的时候,就使用过列表推导式。

# 列表推导式的基本格式,if部分可以不用
[表达式 for 索引 in 列表 if 条件表达式]

# 相当于下面的代码
result = []
for 索引 in 列表:
    if 条件表达式:
        result.append(表达式)

# 简单的列表推导式示例
>>> list_1 = [11, 22, 33, 44, 55, 66]
>>> list_2 = [i/11 for i in list_1]
>>> print(list_2)
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]

# 添加条件语句
>>> list_1 = [11, 22, 33, 44, 55, 66]
>>> list_2 = [i/11 for i in list_1 if i%2==0]
>>> print(list_2)
[2.0, 4.0, 6.0]

# 利用列表推导式,构建二维列表,其中每个元素都是0
>>> x, y = 3, 4
>>> list = [[0 for i in range(x)] for j in range(y)]
>>> print(list)
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

聪哥看了《通过示例学习Python列表推导》[3]这篇文章之后,发现列表推导式的竟然还有这么多精彩的打开方式,感兴趣的同学可以看看。

总结

  1. 列表的重要功能是切片,可以截取某个列表中的任意一段作为列表
  2. python内置了许多用于处理列表的方法,大家需要活学活用
  3. 特定情况下,使用二维列表会简化编码
  4. 列表推导式可以简化代码,也体现了python简洁之美

思考

# 1.请编写一个函数,获取字符串中所有的数字,
# 并将它们按照从大到小的顺序排列
# 2.请编写一个函数,找出一个列表中重复次数最多的数字
# 如果遇到次数相等的情况,则一并输出

# 1.
# 必须要引入re模块,否则不能使用compile方法
import re
def get_numbers(string):
    # 利用re模块和正则表达式查找出所有的数字
    pattern = re.compile(r'\d+')
    array = pattern.findall(string)
    # 按从小到大的顺序排序
    array.sort()
    # 将顺序颠倒成从大到小
    array.reverse()
    return array

# 2.
def search(array):
    # 使用set()方法返回一个集合,自动去除了重复元素
    # list()方法将集合转化为列表
    array1 = list(set(array))
    # 获取array1中每个元素的重复次数,因此有:len(array1) == len(array2)
    array2 = [array.count(i) for i in array1]
    # 获取重复次数最大的元素
    array3 = [array1[i] for i in range(len(array2)) if array2[i] == max(array2)]
    return array3

# 上面利用了集合的概念,实现了去除列表中重复元素
# 没接触过集合的同学,可以使用以下代码实现同样的效果
    array1 = []
    for i in array:
        if i not in array1:
            array1.append(i)

参考资料

  1. 《Python对于列表的del, remove, pop操作的区别》原文链接:http://blog.csdn.net/lachesis999/article/details/53353745
  2. 《Python中的推导式使用详解》原文链接:http://www.jb51.net/article/67157.htm
  3. 《通过示例学习Python列表推导》:http://python.jobbole.com/80823/

扫一扫这个二维码,关注公众号:聪哥python,获取最新python3基础教程

python进阶:列表的高级特性_第1张图片
聪哥python

你可能感兴趣的:(python进阶:列表的高级特性)