列表及一些基本操作

本文详细介绍了Python列表的创建、索引、切片、嵌套、内容修改,以及各种列表方法,包括append、extend、insert等。同时,还涉及了列表推导式和ASCII相关知识。
摘要由CSDN通过智能技术生成


列表 --> list # list是可变类型(列表中的内容可以修改)

两个相同的列表内存地址不同

1. 创建

  • 列表可以通过方括号括起, 逗号分隔的一组值得到

  • 一个列表可以包含不同的数据类型, 但通常使用时各个元素类型相同

  • list1 = [1, 2, 3, 4]
    print(type(list1))  # --> <class 'list'>
    

2. 索引

  • list1 = [1, 4, 9, 16, 25]
    print(list1[0])  # --> 1
    print(list1[3])  # --> 16
    

3. 切片

  • list1 = [1, 4, 9, 16, 25]
    print(list1[:2])   # --> [1, 4]
    print(list1[2:4])  # --> [9, 16]
    

4. 嵌套列表

  • list2 = [[1, 2], [3, 4]]
    print(list2[0][1])  # --> 2
    print(list2[1][0])  # --> 3
    list2[0] = []
    print(list2)  # --> [[], [3, 4]]
    

5. 修改列表中的内容

  • 给列表的索引赋值, 改变原索引位置的值

    list1 = [1, 2, 3, 4, 5]
    list1[0] = 6
    print(list1)  # --> [6, 2, 3, 4, 5]
    
  • 列表的切片赋值给另一个列表, 改变切片原位置的值

    list1 = [1, 2, 3]
    list2 = [5, 6]
    list1[0:2] = list2
    print(list1)  # --> [5, 6, 3]
    
  • 列表的切片也可以赋值给一个字符串(#会将字符串拆分开来放入列表中)

    list1 = [1, 2, 3, 4]
    list1[1:3] = 'a'
    print(list1)  # --> [1, 'a', 4]
    list2 = [1, 2, 3, 4]
    list2[1:3] = 'abc'
    print(list2)  # --> [1, 'a', 'b', 'c', 4]
    
  • 注意, 列表的切片不能赋值给不可迭代的对象, 例如 int

    list1 = [3, 4, 5]
    list1[1:2] = 1  # --> TypeError: can only assign an iterable
    
  • 列表也可以用’+'拼接

    list1 = [1, 2]
    list2 = [3, 4]
    list1 += list2  # 这里相当于list1 = list1 + list2
    print(list1)    # --> [1, 2, 3, 4]
    

6. 列表的方法(函数)

语法 : list.函数名(参数1, 参数2)

注意 : 与字符串不同的是, 列表的方法会直接改变列表本身, 而不会提供一个返回值(大多数)

  • list.append(x) 将x添加到list末尾

    list1 = [1, 2]
    list1.append(3)
    print(list1)  # --> [1, 2, 3]
    
  • list.extend(list1) 将list1中的元素取出, 一个一个添加到list中

    list_a = [1, 2]
    list_b = [3, 4]
    list_a.extend(list_b)
    print(list_a)  # --> [1, 2, 3, 4]
    
  • list.insert(x, y) 将y添加到list的索引x的位置, # x --> 插入的位置, y --> 插入的元素

    list1 = [1, 2, 3]
    list1.insert(0, 4)
    print(list1)  # --> [4, 3, 2, 1]
    
  • list.pop(x) 把索引x对应的值弹出来, 相当于删除(根据索引来删除)

    list1 = [1, 2, 3]
    # pop方法可以得到一个返回值, 返回值就是被弹出的元素
    print(list1.pop(0))  # --> 1
    print(list1)  # --> [2, 3]
    
    # pop方法不传参数时, 默认弹出最后一个
    list2 = [4, 5, 6]
    list2.pop()
    print(list2)  # --> [4, 5]
    
  • list.remove(x) 直接删除list中的元素x

    list1 = [1, 2, 3]
    list1.remove(2)
    print(list1)  # --> [1, 3]
    
    # 注意, 如果列表中存在相同的元素, 则删除的是从左边找到的第一个
    list2 = ['a', 'b', 'c', 'a', 'd']
    list2.remove('a')
    print(list2)  # --> ['b', 'c', 'a', 'd']
    
    # 也可以用del删除列表中的元素
    list3 = ['a', 'b', 'c']
    del list3[0]
    print(list3)  # --> ['b', 'c']
    # 注意, 如果del list, 删除的是变量名
    del list3
    print(list3)  # --> NameError: name 'list3' is not defined
    
  • list.index(x) 获取元素x在list中的索引(#同样也是从左边找到的第一个)

    list1 = [0, 1, 2, 3, 'abc', 5]
    print(list1.index('abc'))  # --> 4
    
    # 也可以传三个参数, list.index(x, start, stop)
    # 后两个参数代表搜索的索引范围
    list2 = [0, 1, 2, 3, 'abc', 5, 6, 'abc', 8]
    print(list2.index('abc'))  # --> 4
    print(list2.index('abc', 6, 8))  # --> 7
    
  • list.sort() 将list中的元素按从小到大的顺序排序

    # 排序时list中的元素必须是相同类型, 不同类型不能比较
    # 字符串比较大小比较的是对应的ASCII编号的大小, ASCII在文章末尾有介绍
    list1 = [2, 4, 6, 1, 9, 3]
    list1.sort()
    print(list1)  # --> [1, 2, 3, 4, 6, 9]
    list2 = [2, 1, 'a', 'b']
    list2.sort()  # --> TypeError: '<' not supported between instances of 'str' and 'int'
    list3 = ['c', 'a', 'd', 'b']
    list3.sort()
    print(list3)  # --> ['a', 'b', 'c', 'd']
    
    # 也可以指定key参数来规定排序方式
    # key参数需要是一个是函数, 可以是lambda表达式, 也可以是自定义的一个函数
    list1 = [{'age': 18, 'name': '小明'}, {'age': 16, 'name': '小红'}]
    list1.sort(key=lambda i: i['age'])
    print(list1)  # --> [{'age': 16, 'name': '小红'}, {'age': 18, 'name': '小明'}]
    # 这里的i是遍历list1得到的每一项
    
    # list.sort(reverse=True)  从大到小(降序)
    # reverse参数可以控制升序还是降序, 默认为False
    list1 = ['a', 'ab', 'abc']
    list1.sort(reverse=True)
    print(list1)  # --> ['abc', 'ab', 'a']
    
  • list.count(x) 统计x在list中出现的次数

    list1 = [1, 2, 2, 3, 4]
    print(list1.count(2))  # --> 2
    
  • list.reverse() 反转原列表中元素的顺序

    list1 = [1, 2, 3, 4, 5]
    list1.reverse()
    print(list1)  # --> [5, 4, 3, 2, 1]
    
  • list.clear() 清空列表

    list1 = [1, 2, 3, 4]
    list1.clear()
    print(list1)  # --> []
    
  • list.copy() 浅拷贝(如果拷贝对象中有引用对象, 则拷贝的是该引用对象的地址)

    list_a = [1, 2, 3]
    list_b = [1, 2, 3, list_a]
    list_c = list_b.copy()
    print(list_c)  # --> [1, 2, 3, [1, 2, 3]]
    
    # list_a 发生变化时, b、c都变,list_b发生变化时,c不变
    list_a[1] = 'abc'
    print(list_b)  # --> [1, 2, 3, [1, 'abc', 3]]
    print(list_c)  # --> [1, 2, 3, [1, 'abc', 3]]
    list_b[1] = 'eee'
    print(list_c)  # --> [1, 2, 3, [1, 'abc', 3]]
    
  • 提到浅拷贝, 那么顺便在这里提一下深拷贝, 以示区分

    # 深拷贝 : 第一次拷贝时就直接拷贝值
    from copy import deepcopy
    list_a = [1, 2, 3]
    list_b = [1, 2, 3, list_a]
    list_d = deepcopy(list_b)
    list_a[0] = 'hello'  # a变时, b变, d不变
    print(list_b)  # --> [1, 2, 3, ['hello', 2, 3]]
    print(list_d)  # --> [1, 2, 3, [1, 2, 3]]
    

7. 列表推导式

  • 语法 : list = [表达式 for 变量 in 范围 if 条件]

    a = [i for i in range(5)]  # [表达式 for 变量 in 范围]
    print(type(a))  # --> <class 'list'>
    print(a)        # --> [0, 1, 2, 3, 4]
    
    b = [x for x in range(10) if x % 2 == 1]  # [表达式 for 变量 in 范围 if 条件]
    print(b)  # --> [1, 3, 5, 7, 9]
    
    c = [x + y for x in range(1, 5) for y in range(2, 6)]  # 相当于双重循环
    print(c)  # --> [3, 4, 5, 6, 4, 5, 6, 7, 5, 6, 7, 8, 6, 7, 8, 9]
    
    d = [[i for i in range(5)] for x in range(4)]  # 生成嵌套列表
    print(d)  # -->[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
    

附 :ASCII

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值