• Python基础06_list


    尽量多挤点时间用来学点知识吧。

    list是不同于字符串的,字符串定义后不可修改,而list是可以修改的。

    以下是学习笔记:

    #!/usr/bin/env python
    # coding:utf-8
    
    list1 = [123]
    list2 = [456]
    print(list1 < list2)
    
    # 列表元素的关键点在于逗号分隔
    lis1 = [123, 456]
    lis2 = [234, 123]
    print(lis1 > lis2)  # 以列表中第一个元素为比较
    print(lis1 + lis2)
    
    lis3 = lis2 + ["abcd"]  # 使用加号时,必须同类型
    print(lis3)
    print(lis3 * 4)  # 重复四次
    
    # ctrl + Alt + L 可以对当前文档重新格式化。
    # 列表支持插入、修改、删除操作
    lis3.insert(1, ["dddd", "eee", "tom"])  # 在索引1 插入元素
    print(lis3)
    
    lis3[0] = '555'  # 修改元素
    
    print('tom' in lis3[1])
    
    print(lis3[1][1])  # 取二维列表中的元素
    
    print(lis3[1:-1], "
     -------------")  # 切片
    # 查看list 的函数
    # print(dir(list))
    
    del lis3[3]  # 删除元素
    
    for item in lis3:
        print(item)
    #!/usr/bin/env python
    # coding:utf-8
    
    # 列表: 打了激素的数组
    mix = [1, "abander", 3.14, [3, 6, 9]]
    
    mix.append("中文")  # 添加单个元素
    print(mix)
    
    mix.extend(["kkk", 222, "追加"])  # 添加多个元素
    print(mix)
    
    mix.insert(3, 1.41421)  # 在指定位置插入一个元素
    print(mix)
    
    # 交换两个元素的位置,跟交换两个变量是同样的方法。
    tmp = mix[0]
    mix[0] = mix[3]
    mix[3] = tmp
    print(mix)
    
    # 元素的删除
    mix.remove("kkk")
    print(mix)
    del mix[0]  # 索引删除
    del mix[2:] # 切片删除 从下标2往后
    print(mix) name = mix.pop() # 弹出最后一个元素。 print(name) print(mix) na = mix.pop(3) # 弹出指定下标的元素 print(na) print(mix, "---------------") # 列表的分片 mix[2:4] = [888, 999] # 通过切片的方式修改 print(mix[:4]) print(mix[2:]) # 得到一个列表的拷贝。 而如果直接mixer = mix 的话,则不是拷贝,只是引用。 mixer = mix[:] mixer.insert(0, 333) print(mixer) print(mix) # 总结: 添加元素建议使用 extend , 复制列表也一定要带上 [:]

    中间穿插了一个三元运算符的知识点,不同于传统编程语言的写法,

    另外还讲了个 assert 函数,当false时直接终止程序.

    #!/usr/bin/env python
    # coding:utf-8
    
    # 三元操作符
    x,y = 4, 5
    
    small = x if x<y else y
    print(small)
    
    # 断言 assert
    # 当关键字后边的条件为假时,程序自动崩溃并抛出AssertionError异常.
    # 通常用于调试.
    # 当需要确保程序中某个条件一定为真才能让程序正常工作的话,assert就有用了。
    
    # assert 5 < 7
    # assert 5 < 4
    
    
    a = list(range(5)) # 直接list出 range 范围内的元素
    print(a)

    这些 str, int, list 都是类, 都提供了对应的一些方法。

    list类中的一些方法示例:

    #!/usr/bin/env python
    # coding:utf-8
    
    # 对于字符串转换成列表,内部使用for循环
    
    s = "sadlkfi1235fk"
    li = list(s)  # 默认是将每个字符拆开成列表
    print(li)
    
    # ############ 列表转为字符串
    # 1. 如果只有字符串
    
    s = ["234", "abcde"]
    v = "".join(s)
    print(v)
    
    # 2. 如果既有数字又有字符串
    
    s = [323, 555, "889", "strry"]
    v = ""
    for item in s:
        v = v + str(item)
    print(v)
    
    ##################### 列表类中提供的方法
    
    s.append([5, 6])  # 追加为单个整体
    print(s)
    
    # s.clear()  # 清空
    # print(s)
    
    s.extend([5, 6])  # 追加为多个元素
    print(s)
    s.extend("不得了")
    print(s)
    
    v = s.pop(0)  # 删除指定的元素并获取值
    print(v)
    
    s.remove([5, 6])  # 删除指定值
    print(s)
    
    s.reverse()  # 反转
    print(s)
    
    # s.sort(reverse=True)   # 降序 不加参数表示升序
    # print('-----------',s)

    列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。例如:

    >>> stack = [3, 4, 5]
    >>> stack.append(6)
    >>> stack.append(7)
    >>> stack
    [3, 4, 5, 6, 7]
    >>> stack.pop()
    7
    >>> stack
    [3, 4, 5, 6]
    >>> stack.pop()
    6
    >>> stack.pop()
    5
    >>> stack
    [3, 4]

    不建议将列表当作队列使用,因为效率不高。参见:http://www.runoob.com/python3/python3-data-structure.html

    unpack 方式取列表元素:优点:方便,速度快.

    ### 补充小知识 unpack方式取列表元素 一 一对应关系
    # * 表示多个, _ 表示丢弃不要
    li = [2, 5, 1, 98, 32, 4, 7, 3, 9] a, *_, b = li # 取首尾各一个 print(a, b) c, d, e, *_ = li # 取前三个 print(c, d, e) *_, f, g = li # 取最后2个 print(f, g) #### python支持变量直接交换 x = 33 y = 22 x, y = y, x print(x, y)

    列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。

    每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。

    将列表中每个数值乘三,获得一个新的列表:

    >>> vec = [2, 4, 6]
    >>> [3*x for x in vec]
    [6, 12, 18]
    >>> [[x, x**2] for x in vec]
    [[2, 4], [4, 16], [6, 36]]
    >>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
    >>> [weapon.strip() for weapon in freshfruit]
    ['banana', 'loganberry', 'passion fruit']

    用 if 子句作为过滤器:

    >>> [3*x for x in vec if x > 3]
    [12, 18]
    >>> [3*x for x in vec if x < 2]
    []

    一些关于循环和其它技巧的演示:

    >>> vec1 = [2, 4, 6]
    >>> vec2 = [4, 3, -9]
    >>> [x*y for x in vec1 for y in vec2]
    [8, 6, -18, 16, 12, -36, 24, 18, -54]
    >>> [x+y for x in vec1 for y in vec2]
    [6, 5, -7, 8, 7, -5, 10, 9, -3]
    >>> [vec1[i]*vec2[i] for i in range(len(vec1))]
    [8, 12, -54]

    列表推导式可以使用复杂表达式或嵌套函数:

    >>> [str(round(355/113, i)) for i in range(1, 6)]
    ['3.1', '3.14', '3.142', '3.1416', '3.14159']

    列表还可以嵌套。

    以下实例展示了3X4的矩阵列表:

    >>> matrix = [
    ...     [1, 2, 3, 4],
    ...     [5, 6, 7, 8],
    ...     [9, 10, 11, 12],
    ... ]
    >>> [[row[i] for row in matrix] for i in range(4)]
    [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

    http://www.runoob.com/python3/python3-data-structure.html

  • 相关阅读:
    Windows下如何检测用户修改了系统时间并且把系统时间改回来
    洛谷 1220 关路灯
    洛谷 2279 [HNOI2003]消防局的设立
    洛谷 1498 南蛮图腾
    bzoj 1036 [ZJOI2008]树的统计Count 树链剖分模板
    codevs 1021 玛丽卡 SPFA
    codevs 1077 多源最短路 flyod
    Vijos P1133 装箱问题 01背包
    codevs 1069 关押罪犯 并查集
    codevs 1073 家族 并查集
  • 原文地址:https://www.cnblogs.com/frx9527/p/python_06.html
Copyright © 2020-2023  润新知