Python——列表list

1. 什么是列表 list

列表 list 是 Python 内置的一种数据类型。在[]用逗号分隔开多个任意类型的值,通常用来描述同一种类型的值,放入列表。

list 的特点:

  • 有序
  • 存多个值
  • 可以按索引村取值
  • 可以随时添加和删除其中的元素
  • 可变类型(可变:值可变,id不变)
  • 不可hash

2. 如何使用列表 list

  • 获取列表 list中元素的个数

    1
    2
    3
    4
    5
    >>> name = ['David','Nick','Rachel','Rose']
    # len() 是 Python 的内置函数之一,主要功能是返回对象的长度或者项目个数
    # 对象可以是(字符串、列表、元祖、集合、字典)
    >>> len(name)
    4
  • 取列表中重复的元素

    1
    2
    3
    >>> name = ['David','Nick','Rachel','Rose','Nick']
    >>> name.count('Nick')
    2
  • 按索引取值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    >>> name = ['David','Nick','Rachel','Rose']
    >>> name
    ['David', 'Nick', 'Rachel', 'Rose']
    >>> name[0] # 按索引来访问list中每一个位置的元素,位置从0开始计算
    'David'
    >>> name[1]
    'Nick'
    >>> name[-1] # 索引 -1 代表直接取到列表的最后一个值 也就是倒数第一个值
    'Rose'
    >>> name[-2] # 依次类推 可以取倒数第二个值
    'Rachel'
    >>> name[4] # 当索引取4时,列表索引超过了范围,就会提示你列表索引超过了范围
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    IndexError: list index out of range
    # 最后一个元素的索引可以 可以用 元素个数减1 也可以表示为 len(name)-1
  • 按值找索引

    1
    2
    3
    4
    5
    6
    7
    >>> name = ['David','Nick','Rachel','Rose']
    >>> name.index('Rachel')
    2
    >>> name.index('Lily')
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    ValueError: 'Lily' is not in list
  • 添加元素

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    >>> name = [] # 声明一个空列表

    # append
    >>> name.append('David')
    >>> name # 打印列表
    ['David']
    >>> name.append('Nick')
    >>> name
    ['David', 'Nick'] # .append()追加 在列表最后一个元素后边追加元素
    >>> new_name = ['Jack','Lily']
    >>> name.append(new_name)
    ['David', 'Nick', ['Jack', 'Lily']]
    # 我们看到结果是append 将一整个new_name作为一个整体传入name中作为一个元素

    # extend
    # 那其实我们还有另外一种添加的方法 .extend()
    # .extend()可以把new_name中的元素一个一个加入到name中
    >>> name = ['David','Nick']
    >>> new_name = ['Jack','Lily']
    >>> name.extend(new_name)
    ['David', 'Nick', 'Jack', 'Lily']

    # 那么如果想要在指定位置追加元素呢
    >>> name = ['David','Nick','Rachel']
    >>> name.insert(1,'Jim') # insert(你想插入的位置,插入的内容)
    >>> name
    ['David', 'Jim', 'Nick', 'Rachel']
  • 删除元素

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    >>> name = ['David','Nick','Rachel','Rose']

    # pop
    >>> name.pop() # 默认删除列表最后一个元素 并且有返回值 ‘Rose’ 改变原列表
    'Rose'
    >>> name
    ['David', 'Nick', 'Rachel']

    >>> name.pop(1) # pop写入索引 按索引删除指定位置的元素
    'Nick'
    >>> name
    >>> ['David', 'Rachel']

    # del
    >>> del name[0] # 按索引删除 name列表中的元素
    >>> name
    ['Rachel']

    # remove
    >>> name = ['David','Nick','Rachel','Rose']
    >>> name.remove(0) # 尝试用索引
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    ValueError: list.remove(x): x not in list
    # 报错 参数x 不在list中
    >>> name.remove('Rachel')
    >>> name # 可以看出remove的参数 传入的必须是是list中的元素内容
    ['David', 'Nick', 'Rose']

    # clear
    >>> name.clear() # 不会返回一个列表,而是返回给你一个内存地址
    <built-in method clear of list object at 0x1048b0148>
    >>> name.clear()
    >>> name
    [] # 清空列表
  • 替换元素

    1
    2
    3
    4
    5
    6
    >>> name = ['David','Nick','Rachel','Rose']
    >>> name[1] = 'Mary' # 将索引[1]位置的元素替换成 'Mary'
    >>> name
    ['David', 'Mary', 'Rachel', 'Rose']
    >>> name[-1] = 'Jack' # 同理正反取索引 都以用来替换元素
    ['David', 'Mary', 'Rachel', 'Jack']
  • 列表的嵌套

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> name = ['David','Nick','Rachel']
    >>> name_2 = ['Rose', name]
    >>> name_2
    ['Rose', ['David', 'Nick', 'Rachel']]
    # 如何取值 取到'Nick'
    # name_2 = ['Rose', name] 其实就是在name_2的列表中套了一个name
    # 在这里可以把name看作是name_2中的元素
    # 我们要取到name中的'Nick' 就需要先取值 取到name_2中的 name元素
    # 然后再取 name 中的'Nick'元素 所以我们就可以怎么干
    >>> name_2[1][1]
    'Nick'
  • 切片(有头,无尾,步长默认为1)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    >>> name = ['David','Nick','Rachel','Rose']
    >>> name[0:3] # 返回值可以通过声明一个变量去接收
    ['David', 'Nick', 'Rachel']
    # 有头指的是从索引[0]开始,无尾是取不到索引[3]= 'Rose'位置的值
    >>> name # 不会改变原列表
    ['David', 'Nick', 'Rachel', 'Rose']
    >>> name[0:4:2]
    # 这里没有报超出索引范围的错误,可以看出只取到了[3]
    # 默认步长为1,这里改为2,意思就是为 一个 隔 一个 取值
    ['David', 'Rachel']
    >>> name[0:] # 意思为 从列表的头,取到列表的尾巴,就是取到元素最后一个值
    ['David', 'Nick', 'Rachel', 'Rose']
    >>> name[1:]
    ['Nick', 'Rachel', 'Rose']
    >>> name[-2:] # 从倒数第二个值开始取,取到列表的尾巴
    ['Rachel', 'Rose']
    >>> name[:-1] # 从最开头,取到倒数第一个值,有头无尾,所以不会取最后一个值
    ['David', 'Nick', 'Rachel']
    >>> name[:-2]
    ['David', 'Nick']
    >>> name[:] # 不传入任何参数,就是从头取到尾
    ['David', 'Nick', 'Rachel', 'Rose']
  • 成员运算 in和not in

    1
    2
    3
    4
    5
    6
    7
    >>> name = ['David','Nick','Rachel','Rose']
    >>> 'David' in name # 判断name这个列表中是否有'David',然后返回一个布尔值
    True
    >>> 'Lily' in name
    False
    >>> 'Lily' not in name # 判断name这个列表中 没有'Lily',然后返回一个布尔值
    True
  • 循环

    1
    2
    3
    4
    5
    6
    7
    8
    >>> name = ['David','Nick','Rachel','Rose']
    >>> for item in name:
    ... # for 循环通常用来取值 这里将name列表中的元素一个一个取出来
    ... print(item)
    David
    Nick
    Rachel
    Rose
  • 排序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    >>> name = ['David','Nick','Rachel','Rose']

    # reverse 反转列表
    >>> name.reverse() # 直接改变原列表,反转
    >>> name
    ['Rose', 'Rachel', 'Nick', 'David']

    >>> name = ['David','Nick','Rachel','Rose']
    >>> name[::-1] # 通过切片的方式反转列表
    ['Rose', 'Rachel', 'Nick', 'David']

    # sort 对原列表排序
    >>> name = ['David','Nick','Rachel','Rose']
    >>> name.sort(reverse = True) # 直接改变原列表,反转,无返回值
    >>> name
    ['Rose', 'Rachel', 'Nick', 'David']
    # 默认参数 sort(cmp = None,key = None,reverse = False)
    # cmp: 按照传入参数的方法进行排序,还没学到
    # key:主要用来进行排序,只有一个参数,具体的函数参数取自可迭代对象中,指定可迭# 代对象中的一个元素来进行排序(先不管,还没法理解)
    # reverse = False(默认序列) reverse = True (反转序列)