Python学习日记(四)


一、列表

  • 普通列表:列表元素类型一致
    >>> member=['刘昊然','秦霄贤','蛋黄派']
    >>> member
    ['刘昊然', '秦霄贤', '蛋黄派']
    >>> number=[1,2,3,4]
    >>> number
    [1, 2, 3, 4]
  • 混合列表:列表元素类型不一致
    >>> mix=['刘昊然',1,2,3,'mine']
    >>> mix
    ['刘昊然', 1, 2, 3, 'mine']
    
    
    >>> mix=['刘昊然',1,2,3,'mine',[2,2,'heihei']]
    >>> mix
    ['刘昊然', 1, 2, 3, 'mine', [2, 2, 'heihei']]
  • 空列表:预先给程序创建一个空列表,为后续程序使用
    >>>empty=[]

二、列表添加元素

  • append()
  • 语法:对象.append(新增元素)
  • 其中append是对象的方法,用 . 表示限制,只能逐个添加,但是参数可以是一个列表,即添加一个列表元素
    >>> mix
    ['刘昊然', 1, 2, 3, 'mine', [2, 2, 'heihei']]
    >>> mix.append('麦外敷')
    >>> mix
    ['刘昊然', 1, 2, 3, 'mine', [2, 2, 'heihei'], '麦外敷']
    
    
    >>> mix.append(6,8)
    Traceback (most recent call last):
      File "", line 1, in 
        mix.append(6,8)
    TypeError: append() takes exactly one argument (2 given)
  • extend()
  • 使用一个列表扩展另外一个列表,参数为列表,列表中的元素逐个插入列表
    >>> mix.extend(['love','you'])
    >>> mix
    ['刘昊然', 1, 2, 3, 'mine', [2, 2, 'heihei'], '麦外敷', 'love', 'you']
  • append() 方法是将参数作为一个元素增加到列表的末尾。
    extend() 方法则是将参数作为一个列表去扩展列表的末尾。

    append(['a','b'])和extend(['a','b'])是不一样的
    >>> name = ['F', 'i', 's', 'h']
    >>> name.append('C')
    >>> name
    ['F', 'i', 's', 'h', 'C']
    >>> name.extend(['.', 'c'])
    >>> name
    ['F', 'i', 's', 'h', 'C', '.', 'c']
    >>> name.append(['o', 'm'])
    >>> name
    ['F', 'i', 's', 'h', 'C', '.', 'c', ['o', 'm']]
  • insert()
  • 语法:insert(想插入列表位置,元素)
  • 可以设置插入位置,以上两个只能添加到末尾
    >>> mix.insert(0,'咩咩')
    >>> mix
    ['咩咩', '刘昊然', 1, 2, 3, 'mine', [2, 2, 'heihei'], '麦外敷', 'love', 'you']
    

三、列表元素的相关操作

  • 获取列表元素
  • 可以通过元素的索引值index从列表索取单个元素,注意索引值从0开始
  • >>> member
    ['刘昊然', '秦霄贤', '蛋黄派']
    >>> member[0]
    '刘昊然'
    
    通过临时变量交换元素位置
    >>> temp=member[0]
    >>> member[0]=member[1]
    >>> member[1]=temp
    >>> member
    ['秦霄贤', '刘昊然', '蛋黄派']
  • 删除列表元素
  • remove
  • 语法:对象.remove(参数)
  • 只知道参数的名字即可删除,不用知道参数位置
  • >>> mix
    ['咩咩', '刘昊然', 1, 2, 3, 'mine', [2, 2, 'heihei'], '麦外敷', 'love', 'you']
    >>> mix.remove('咩咩')
    >>> mix
    ['刘昊然', 1, 2, 3, 'mine', [2, 2, 'heihei'], '麦外敷', 'love', 'you']
  • del
  • 语法:del  列表[下标]可删除列表元素;del 列表可删除整个列表
  • 不是函数也不是方法,而是一个语句
    >>> mix
    ['咩咩', '刘昊然', 1, 2, 3, 'mine', [2, 2, 'heihei'], '麦外敷', 'love', 'you']
    >>> mix.remove('咩咩')
    >>> mix
    ['刘昊然', 1, 2, 3, 'mine', [2, 2, 'heihei'], '麦外敷', 'love', 'you']
    >>> del mix[1]
    >>> mix
    ['刘昊然', 2, 3, 'mine', [2, 2, 'heihei'], '麦外敷', 'love', 'you']
    >>> del member
    >>> member
    Traceback (most recent call last):
      File "", line 1, in 
        member
    NameError: name 'member' is not defined
  • pop()
  • pop():弹栈,member.pop(索引值),默认弹出列表最后一个元素
  • 语法:对象.pop();对象.pop(索引)
  • 默认从列表中弹出最后一个元素并返回,可指定位置,可用变量接收返回值
    >>> mix
    ['刘昊然', 2, 3, 'mine', [2, 2, 'heihei'], '麦外敷', 'love', 'you']
    >>> mix.pop()
    'you'
    >>> mix.pop(1)
    2
    >>> mix
    ['刘昊然', 3, 'mine', [2, 2, 'heihei'], '麦外敷', 'love']
    

四、列表切片

  • 语法:对象[开始位置,结束位置]
  • 利用列表切片可以一次性从列表获取多个元素,得到的是列表片段的拷贝,原列表不变
  • 当不想对原列表进行修改但是想操作列表时可用 对象[ : ]获得列表拷贝
  • 步长默认为1,不能为0,可以为负代表反向切片
  • >>> mix
    ['刘昊然', 3, 'mine', [2, 2, 'heihei'], '麦外敷', 'love']
    >>> mix[1:3]
    [3, 'mine']
    >>> mix[:4]
    ['刘昊然', 3, 'mine', [2, 2, 'heihei']]
    >>> mix[2:]
    ['mine', [2, 2, 'heihei'], '麦外敷', 'love']
    >>> mix[:]
    ['刘昊然', 3, 'mine', [2, 2, 'heihei'], '麦外敷', 'love']
    >>> mix2=mix[:]
    >>> mix2
    ['刘昊然', 3, 'mine', [2, 2, 'heihei'], '麦外敷', 'love']

五、列表常用操作

  • 比较操作符
  • 列表进行比较时默认从第一个元素进行比较得到结果,根据第一个元素的比较结果作为列表比较结果,相等则继续比较下一个元素
  • 字符串以ASCII码的形式进行比较
    >>> list1=[123]
    >>> list2=[234]
    >>> list1>> list3=[111,222]
    >>> list4=[222,111]
    >>> list3>list4
    False
    >>> list5=[111,222]
    >>> list6=[111,233]
    >>> list5>> list=['a','b']
    >>> l1=['a','b','c']
    >>> l2=['b','a']
    >>> l1>l2
    False
    
    字符串逐个比较
    >>> l3=['abc','ccc']
    >>> l4=['acb']
    >>> l3>> l4=['acb','aaa']
    >>> l3>l4
    False
  •  连接操作符
  • 可用+将两个列表连接在一起,但最好用extend连接,因为+不能实现新元素的添加操作,因为+两边类型应该一致,两边都是列表就可以
    >>> list1=['刘昊然','老公']
    >>> list2=['变成','富婆']
    >>> list1+=list2
    >>> list1
    ['刘昊然', '老公', '变成', '富婆']
    >>> list1+'富婆'
    Traceback (most recent call last):
      File "", line 1, in 
        list1+'富婆'
    TypeError: can only concatenate list (not "str") to list
    >>> list1.extend(list2)
    >>> list1
    ['刘昊然', '老公', '变成', '富婆', '变成', '富婆']
  • 重复操作符
    >>> l4
    ['acb', 'aaa']
    >>> l4*2
    ['acb', 'aaa', 'acb', 'aaa']
  • 成员关系操作符
  • in/not in,返回值为bool型数据
  • 只能判断一个层次的成员关系,例如列表中的列表中的元素不能单独判断,可以手动降低层次提取元素判断
  • 访问列表中的列表中的元素可用二维切片的形式
    >>> l4
    ['acb', 'aaa', 'acb', 'aaa']
    >>> 'acb' in l4
    True
    >>> 'a' in l4
    False
    >>> 'a' in l4[0]
    True
    >>> l4[0][1]
    'c'
    >>> l4=['a',['b','c'],'d']
    >>> l4
    ['a', ['b', 'c'], 'd']
    >>> l4[1][0]
    'b'
  • count()
  • 语法:对象.count(元素),返回整型数
  • 作用是统计列表中某个元素出现的次数
    >>> list1
    ['刘昊然', '老公', '变成', '富婆', '变成', '富婆']
    >>> list1.count('富婆')
    2
  • index()
  • 语法:对象.index(元素),返回整型数;可指定搜索位置,对象.index(元素,起始位置,结束位置)
  • 作用是返回元素在列表中指定范围的第一个索引值
    >>> list1
    ['刘昊然', '老公', '变成', '富婆', '变成', '富婆', '变成', '富婆', '富婆']
    >>> list1.index('富婆')
    3
    >>> list1.index('富婆',4)
    5
    >>> list1.index('富婆',4,7)
    5
  • reverse()
  • 语法:对象.reverse(),没有参数
  • 逆转函数,将整个列表翻转
    >>> list3=[11,22,33,44,55]
    >>> list3.reverse()
    >>> list3
    [55, 44, 33, 22, 11]
  • sort()
  • sort(reverse=False),含一个参数,默认为False,即升序,设置为True时为逆序
  • 用指定的方法将整个列表排序,默认不需要参数,从小到大进行排序,默认是归并排序
    >>> list3=[11,22,33,44,55]
    >>> list3.reverse()
    >>> list3
    [55, 44, 33, 22, 11]
    >>> list3.sort(reverse=True)
    >>> list3
    [55, 44, 33, 22, 11]

六、关于分片拷贝问题

  • 通过list2=list1[ : ]可以得到与list1相同的列表,对此拷贝列表操作不会影响原列表
  • 通过list3=list1同样可以得到与list1相同的列表,但这不是拷贝得到,而是对原来的列表起了另外一个标签,对此列表操作会影响原列表
  • >>> list1=[1,2,3,4,5,6]
    >>> list2=list1[:]
    >>> list2
    [1, 2, 3, 4, 5, 6]
    >>> list3=list1
    >>> list3
    [1, 2, 3, 4, 5, 6]
    >>> list2.sort(reverse=True)
    >>> list2
    [6, 5, 4, 3, 2, 1]
    >>> list1
    [1, 2, 3, 4, 5, 6]
    >>> list3.sort(reverse=True)
    >>> list3
    [6, 5, 4, 3, 2, 1]
    >>> list1
    [6, 5, 4, 3, 2, 1]

练习题:

1、请问 list1[0] 和 list1[0:1] 一样吗?

答:不一样,list1[0] 返回第0个元素的值,list1[0:1] 返回一个只含有第0个元素的列表

2、如果你每次想从列表的末尾取出一个元素,并将这个元素插入到列表的最前边,你会怎么做?

答: list1.insert(0, list1.pop())

3、Python支持负索引,所以使用负索引也可以访问列表数组

4、如何用列表切片完成列表翻转

  • >>> a=[1,2,3,4]
    >>> a[::-1]
    [4, 3, 2, 1]

5、请问如何将下边这个列表的'小甲鱼'修改为'小鱿鱼'?

  • >>>list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
    >>>list1[1][2][0] = '小鱿鱼'

    注意小鱿鱼所在也是一个列表,所以是三维切片

6、列表还有两个内置方法没给大家介绍,不过聪明的你应该可以自己摸索使用的门道吧:copy() 和 clear()

  • >>> list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
    >>> list2 = list1.copy()
    >>> list1.clear()
    >>> list1
    []
    >>> list2
    [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
    >>> 

总结:

  • 列表的常用操作符:
    比较:如果有多个元素,默认从第一个元素开始比较,比较对应的ASCII码值大小;
    逻辑(and or):
    连接(+):[1, 2, 3] + [4, 5, 6] 结果是 [1, 2, 3, 4, 5, 6]
    重复(*):['Hi!'] * 4 结果是 ['Hi!', 'Hi!', 'Hi!', 'Hi!']
    成员关系(in 和 not in):3 in [1, 2, 3] 结果是 True

  • 列表的方法:dir(list)
    append():在列表末尾添加新的对象
    extend():在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
    count():统计出现的次数
    index(目标,起始位置,截止位置):返回参数在列表中的位置
    insert():将对象插入到列表指定位置
    pop():移除列表中的一个元素(默认最后一个元素,可指定其他的位置),并且返回该元素的值
    remove():移除列表中某个值的第一个匹配项(不能指定位置删除)
    reverse():翻转列表
    sort():按照指定的方式对列表成员排序,默认则从小到大排列
    特别的:sort(reverse=True)表示从大到小,默认为False

  • 列表的内置函数:
    比较两个列表的元素:operator.eq(list1,list2)(前提需import operator)
    计算列表元素个数:len(list1)
    返回列表中元素最大值:max(list1)
    返回列表中元素最小值:min(list1)
    将元组转换为列表:list(tuple1)