zoukankan      html  css  js  c++  java
  • Python

    什么是列表

    • 列表是一个有序的序列
    • 列表中所有的元素放在 [ ] 中间,并用逗号分开
    • 一个 列表 可以包含不同类型的元素,但通常使用时各个元素类型相同

    特征

    占用空间小,浪费内存空间少 

    声明列表变量

    • 列表元素可以是任意数据类型,也可以混搭
    • 可以数组嵌套数组,俗称二元数组
    lis = [1, 2, 3, 1.11]
    lis = ["a", "b", "c"]
    lis = [True, False]
    lis = [{"a": 123}, {"b": 456}]
    lis = [[1], [2]]
    lis = [(1), (2)]
    lis = [1, 1.2, "2", True, {}, [], ()]

    列表常见运算操作

    运算符 +

    # + 运算
    a = [1] + [2, 3, ] + [4, 5]
    print(a)
    
    b = [1, 2] + ["3", "4"]
    print(b)
    
    # 输出结果 [1, 2, 3, 4, 5] [1, 2, '3', '4']
    •  变量 b 是赋值两个不同数据类型的列表,虽然不会报错,但是 pycharm 会有 warning
    • Expected type 'List[int]' (matched generic type 'List[_T]'), got 'List[str]' instead 
    • 本来应该是 List[int],但后面用了 List[str] 代替,不过我也没 get 到这个 warn 想干嘛哈哈

    运算符 *

    # * 运算
    a = [1, 2] * 3
    print(a)
    
    # 输出结果 [1, 2, 1, 2, 1, 2]

    索引(下标)取值

    # 索引
    a = [1, 2, True, {"name": "小菠萝"}, ["how", "hi"]]
    
    print(a[0])
    print(a[2])
    print(a[-1])
    print(a[-2])
    
    
    # 输出结果
    1
    True
    ['how', 'hi']
    {'name': '小菠萝'}

      

    切片取值

    • 和字符串一样,列表也可以切片
    • 使用语法:列表[start : end : step],获取列表中在 [start, end) 范围的子列表
    • 注意范围 [start, end) 包含 start,不包含 end
    • step 是步长,设为 n,则每隔 n 个元素获取一次
    # 切片
    a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    print(a[:])  # 取全部
    print(a[0:])  # 取第一个元素到最后一个元素
    print(a[::-1])  # 逆序取全部元素
    print(a[2:5])  # 取第三个元素到第五个元素
    
    
    # 输出结果
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    [3, 4, 5]

    切片赋值

    注意:赋值的值也必须是列表,否则会报错  TypeError: can only assign an iterable 

    # 切片赋值
    a = ["1", "2", "3"]
    print(a)
    a[:] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]  # 切片获取所有元素,并重新赋值
    print(a)
    
    a[2:4] = [33, 44]
    print(a)
    
    a[2:4] = []  # 相当于去掉第 3、4 个元素
    print(a)
    
    a[:] = []  # 将 a 赋值为空列表
    print(a)
    
    
    # 输出结果
    ['1', '2', '3']
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    [1, 2, 33, 44, 5, 6, 7, 8, 9, 0]
    [1, 2, 5, 6, 7, 8, 9, 0]
    []

    关键字 in

    • 通过关键字 in 检查列表中是否包含指定元素,返回 bool 值
    • not in 则是取反
    # in、not in
    a = [1, 2, True, {"name": "小菠萝"}, ["how", "hi"]]
    
    print(1 in a)
    print(3 in a)
    print({"name": "小菠萝"} in a)
    print(False not in a)
    
    
    # 输出结果
    True
    False
    True
    True

    列表常见会用上的内置函数

    len()

    获取列表长度

    # 获取列表长度 
    print(len([1, 2, 3, 4])) 
    
    # 输出结果 
    4

    max()

    获取列表值最大的元素

    最简单的栗子

    # max
    a = [1, 2, 3]
    print(max(a))
    
    # 输出解雇
    3

      

    不同数据类型的栗子

    # 其他栗子 
    a = [1, 2, True, 3]
    print(max(a))
    
    a = ["a", "b", "c"]
    print(max(a))
    
    a = [[1, 2], [3, 4], [3, 5]]
    print(max(a))
    
    
    # 输出结果
    3
    c
    [3, 5]

    同一个列表里包含不同数据类型的话呢?

    a = ["a", "b", 1]
    print(max(a))
    
    
    # 输出结果
        print(max(a))
    TypeError: '>' not supported between instances of 'int' and 'str'
    • 很明显,直接报错了,提示 > 运算符不支持在 int 、str 两种数据类型做运用
    • 所以,使用 max、min 函数时,列表的数据记得是同一个数据类型哦

    传多个参数的栗子

    上面的栗子都是给 max 函数传递了单个参数

    print(max(1, 2, 3))
    print(max([1, 2], [1, 2, 3]))
    
    
    # 输出结果
    3
    [1, 2, 3]

    会返回最大的那一个参数值

    查看 max() 源码

    def max(*args, key=None): # known special case of max
        """
        max(iterable, *[, default=obj, key=func]) -> value
        max(arg1, arg2, *args, *[, key=func]) -> value
        
        With a single iterable argument, return its biggest item. The
        default keyword-only argument specifies an object to return if
        the provided iterable is empty.
        With two or more arguments, return the largest argument.
        """
        pass

    两种传值方式

     max(iterable, *[, default=obj, key=func]) 

    倘若只传一个列表,那么可以指定 default 参数值,当传的列表为空的时候,返回 default 值

     max(arg1, arg2, *args, *[, key=func]) 

    可以传多个参数,返回最大的参数值

    min()

    • 获取列表值最小的元素
    • 跟 max() 就是反过来了,不再举栗子咯

    list 常见方法

    https://www.cnblogs.com/poloyy/p/15058981.html

     
  • 相关阅读:
    排序算法-总览
    MySQL插入大批量测试数据
    【剑指offer】面试的流程
    并发编程-内置锁
    并发编程-使用线程安全类
    规约先行-(二十一)设计规约
    规约先行-(二十)服务器
    [转]web.xml什么时候被加载进内存的
    DOM和BOM的理解
    代理&反向代理
  • 原文地址:https://www.cnblogs.com/poloyy/p/15042130.html
Copyright © 2011-2022 走看看