zoukankan      html  css  js  c++  java
  • 写给小白的Python之006:数据类型之列表

    导读:

    1.列表

    2.列表的方法

    3.列表的遍历

    4.列表当栈和队列

    5.列表推导式

    6.列表嵌套

    7.del语句

    一、列表

    list(列表) 是Python中使用最频繁的数据类型,在其他语言中通常叫做 数组。列表是写在方括号之间、用逗号分隔开的元素列表。索引从0开始。

    列表的格式为:[元素1,元素2,元素3…]

    注意:从列表中取值时,如果 超出索引范围,程序会报错。

    列表中元素的类型可以不相同:

    >>> a = ['him', 25, 100, 'her']
    >>> print(a)
    ['him', 25, 100, 'her']

    和字符串一样,列表同样可以被索引和切片,列表被切片后返回一个包含所需元素的新列表。

    列表还支持串联操作,使用+操作符

    >>> a = [1, 2, 3, 4, 5]
    >>> a + [6, 7, 8]
    [1, 2, 3, 4, 5, 6, 7, 8]

    与Python字符串不一样的是,列表中的元素是可以改变的

    >>> a = [1, 2, 3, 4, 5, 6]
    >>> a[0] = 9
    >>> a[2:5] = [13, 14, 15]
    >>> a
    [9, 2, 13, 14, 15, 6]
    
    >>> a[2:5] = [] # 删除
    >>> a
    [9, 2, 6]

    尽管 Python 的 列表 中可以 存储不同类型的数据,但是在开发中,更多的应用场景是:
    1.列表 存储相同类型的数据;
    2.通过 迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作。

    要点:

    1、list写在方括号之间,元素用逗号隔开。

    2、和字符串一样,list可以被索引和切片。

    3、list可以使用+操作符进行拼接。

    4、list中的元素是可以改变的。

     

     

    二、列表的方法

    分类

    关键字 / 函数 / 方法

    说明

    增加

    列表.insert(索引, 数据)

    在指定位置插入数据

     

    列表.append(数据)

    在末尾追加数据

     

    列表.extend(列表2)

    将列表2 的数据追加到列表

    修改

    列表[索引] = 数据

    修改指定索引的数据

    删除

    del 列表[索引]

    删除指定索引的数据

     

    列表.remove[数据]

    删除第一个出现的指定数据

     

    列表.pop

    删除末尾数据

     

    列表.pop(索引)

    删除指定索引数据

     

    列表.clear

    清空列表

    统计

    len(列表)

    列表长度

     

    列表.count(数据)

    数据在列表中出现的次数

    排序

    列表.sort()

    升序排序

     

    列表.sort(reverse=True)

    降序排序

     

    列表.reverse()

    逆序、反转

    list.append(x)

    在列表的尾部添加一个项,等价于 a[len(a):] = [x] 。

    demo:

    #定义变量A,默认有3个元素
    A = ['xiaoWang','xiaoZhang','xiaoHua']
    print("-----添加之前,列表A的数据-----")
    
    for tempName in A:
        print(tempName)
    
    #提示、并添加元素
    temp = input('请输入要添加的学生姓名:')
    A.append(temp)
    
    print("-----添加之后,列表A的数据-----")
    for tempName in A:
        print(tempName) 

    结果:

    -----添加之前,列表A的数据-----
    xiaoWang
    xiaoZhang
    xiaoHua
    请输入要添加的学生姓名:salmond
    -----添加之后,列表A的数据-----
    xiaoWang
    xiaoZhang
    xiaoHua
    salmond

     

    list.extend(L)

    将给定的列表L接到当前列表后面,等价于 a[len(a):] = L 。

    >>> a = [1, 2]
    >>> b = [3, 4]
    
    >>> a.append(b)
    >>> a
    [1, 2, [3, 4]]
    
    >>> a.extend(b)
    >>> a
    [1, 2, [3, 4], 3, 4]

    list.insert(i, x)

    在给定的位置 i 前插入项,例如:a.insert(0, x) 会在列表的头部插入,而 a.insert(len(a), x) 则等价于a.append(x)。

    >>> a = [0, 1, 2]
    >>> a.insert(1, 3)
    >>> a
    [0, 3, 1, 2]

    list.remove(x)

    移除列表中第一个值为 x 的项,没有的话会产生一个错误。

    movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
    
    print('------删除之前------')
    for tempName in movieName:
        print(tempName)
    
    movieName.remove('指环王')
    
    print('------删除之后------')
    for tempName in movieName:
        print(tempName)

    结果:

    ------删除之前 - -----
    加勒比海盗
    骇客帝国
    第一滴血
    指环王
    霍比特人
    速度与激情
    ------删除之后 - -----
    加勒比海盗
    骇客帝国
    第一滴血
    霍比特人
    速度与激情

    list.pop([i])

    删除列表给定位置的项,并返回它。如果没有指定索引, a.pop() 移除并返回列表的最后一项。(方括号表示可选)。

    movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
    
    print('------删除之前------')
    for tempName in movieName:
        print(tempName)
    
    movieName.pop()
    
    print('------删除之后------')
    for tempName in movieName:
        print(tempName)

    结果:

    ------删除之前 - -----
    加勒比海盗
    骇客帝国
    第一滴血
    指环王
    霍比特人
    速度与激情
    ------删除之后 - -----
    加勒比海盗
    骇客帝国
    第一滴血
    指环王
    霍比特人

    list.clear()

    删除列表中的所有项 。

    movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
    
    print('------删除之前------')
    for tempName in movieName:
        print(tempName)
    
    movieName.clear()
    
    print('------删除之后------')
    for tempName in movieName:
        print(tempName)

    结果:

    ------删除之前 - -----
    加勒比海盗
    骇客帝国
    第一滴血
    指环王
    霍比特人
    速度与激情
    ------删除之后 - -----

     

    list.index(x,start,end)

    返回列表中第一个值为 x 的项的索引。如果没有匹配的项, 则产生一个错误。左闭右开

    list.count(x)

    返回列表中 x 出现的次数。

    >>> a = ['a', 'b', 'c', 'a', 'b']
    
    >>> a.index('a', 1, 3) # 注意是左闭右开区间
    Traceback (most recent call last):
    
      File "<stdin>", line 1, in <module>
    
    ValueError: 'a' is not in list
    
    >>> a.index('a', 1, 4)
    3
    
    >>> a.count('b')
    2
    
    >>> a.count('d')
    0

    list.sort()

    就地完成列表排序(升序)。

    list.sort(reverse=True)

    就地完成列表排序(降序)。

    list.reverse()

    就地完成列表项的翻转。

    >>> a = [1, 4, 2, 3]
    
    >>> a.reverse()
    >>> a
    [3, 2, 4, 1]
    
    >>> a.sort()
    >>> a
    [1, 2, 3, 4]
    
    >>> a.sort(reverse=True)
    >>> a
    [4, 3, 2, 1]

     三、列表的遍历

    遍历 就是 从头到尾 依次 列表 中获取数据;在 循环体内部 针对 每一个元素,执行相同的操作。

    Python 中为了提高列表的遍历效率,专门提供的 迭代 iteration 遍历。

    使用 for 就能够实现迭代遍历:

    # for 循环内部使用的变量 in 列表

    for name in name_list:

        循环内部针对列表元素进行操作

        print(name)

    demo:

    namesList = ['xiaoWang', 'xiaoZhang', 'xiaoHua']
    
    for name in namesList:
        print(name)

    结果:

        xiaoWang

        xiaoZhang

        xiaoHua

    demo:

    namesList = ['xiaoWang', 'xiaoZhang', 'xiaoHua']
    
    length = len(namesList)
    
    i = 0
    while i < length:
        print(namesList[i])
        i += 1

    结果:

        xiaoWang

        xiaoZhang

        xiaoHua

    带下标的遍历

    1种方法:

    chars = ['a', 'b', 'c', 'd']
    
    i = 0
    for chr in chars:
        print("%d %s"%(i, chr))
        i += 1

    结果:

    0 a

    1 b

    2 c

    3 d

    2种方法:enumerate()

    enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

    chars = ['a', 'b', 'c', 'd']
    
    for i, chr in enumerate(chars):
        print (i, chr)

    结果:同上

     

     四、列表当栈和队列

    1. 列表当栈

    list的方法使得其可以很方便地作为一个栈来使用。我们知道,栈的特点是最后进入的元素最先出来(即后入先出),用 append() 方法进行压栈,用不指定索引的 pop() 方法进行出栈。

    示例:

    stack = []
    
    for x in range(1,6):
    
        stack.append(x) # 入栈
    
        print('push', x, end=' ')
    
        print(stack)
    
    print('Now stack is', stack)
    
    while len(stack)>0:
    
        print('pop', stack.pop(), end=' ') # 出栈
    
        print(stack)

    2. 列表当队列

    列表还可以当作队列来使用,队列的特性是第一个加入的元素第一个取出来(即先入先出)。然而,把列表当队列使用效率并不高,因为从列表的尾部添加和弹出元素是很快的,而在列表的开头插入或弹出是比较慢的(因为所有元素都得移动一个位置)。

    要实现一个队列, 使用标准库的collections.deque, 它被设计成在两端添加和弹出都很快。示例:

    from collections import deque
    
    queue = deque() # 创建空队列
    
    for x in range(1,6):
        queue.append(x) # 入队
        print('push', x, end=' ')
        print(list(queue))
    
    print('Now queue is', list(queue))
    
    while len(queue)>0:
        print('pop', queue.popleft(), end=' ') # 出队
        print(list(queue))

    五、列表推导式

    所谓的列表推导式,就是指的轻量级循环创建列表。列表推导式提供了从序列创建列表的简单途径。通常程序会对序列的每一个元素做些操作,并以其结果作为新列表的元素,或者根据指定的条件来创建子序列。
    列表推导式的结构是:在一个方括号里,首先是一个表达式,随后是一个 for 子句,然后是零个或更多的 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。
    示例:

    squares = [x**2 for x in range(10)] # 推导式
    print(squares)

    # 输出是[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

    pairs = [(x, y) for x in [1,2,3] for y in [3,1,4] if x!=y] # 推导式
    print(pairs)

    # 输出是[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

    列表生成式也可以使用两个变量来生成 list:

    >>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
    >>> [k + '=' + v for k, v in d.items()]
    ['y=B', 'x=A', 'z=C']

    把一个 list 中所有的字符串变成小写:

    >>> L = ['Hello', 'World', 'IBM', 'Apple']
    >>> [s.lower() for s in L]
    ['hello', 'world', 'ibm', 'apple']

    案例:
    修改列表生成式,通过添加 if 语句保证列表生成式能正确地执行:

    L1 = ['Hello', 'World', 18, 'Apple', None]
    L2 = [i for i in L1 if isinstance(i, str)]
    print(L2)

    # 输出: ['hello', 'world', 'apple']

    六、列表嵌套

    Python中并没有二维数组的概念,但我们可以通过列表嵌套达到同样的目的。

    mat = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ]

    同样,我们可以使用推导式生成嵌套的列表:

    mat = [[1,2,3], [4,5,6], [7,8,9]]
    new_mat = [ [row[i] for row in mat] for i in [0,1,2] ] # 嵌套
    print(new_mat) # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

     

     七、附:del语句

    del 语句可以通过给定索引(而不是值)来删除列表中的项,它与返回一个值的pop()方法不同。del语句也可以移除列表中的切片,或者清除整个列表 :

    lst = [1,2,3,4,5,6,7,8,9]
    
    del lst[2] # 删除指定索引项
    
    print(lst) # [1,2,4,5,6,7,8,9]
    
    del lst[2:5] # 删除切片
    
    print(lst) # [1,2,7,8,9]
    
    del lst[:] # 删除整个列表
    
    print(lst)

    # 在日常开发中,要从列表删除数据,建议 使用列表提供的方法。 

    del关键字本质上是用来将一个变量从内存中删除的。在删除变量实体之后再引用该变量的话会产生错误。

    del用于删除变量实体:

    del lst

    八、练习题:列表

    从今天起,每篇的练习题都会在本篇中给出。希望各位看官,先把练习题做一遍,再看答案。

    练习1:
    请写出一段 Python 代码实现分组一个 list 里面的元素,比如 [1,2,3,...100]变成 [[1,2,3],[4,5,6]....]

    练习题2:工位随机分配

    一个学校,有3个办公室,现在有8位老师等待工位的分配,请编写程序,完成随机的分配。

    ------------------以下为答案----------------以下为答案----------------以下为答案----------------

    练习题1参考答案:

    a = [x for x in range(1,101)]
    b = [a[x:x+3] for x in range(0,len(a),3)]

    练习题2参考答案:

    #encoding=utf-8
    
    import random
    
    # 定义一个列表用来保存3个办公室
    offices = [[],[],[]]
    
     # 定义一个列表用来存储8位老师的名字
    names = ['A','B','C','D','E','F','G','H']
    
    i = 0
    for name in names:
        index = random.randint(0,2)    
        offices[index].append(name)
     
    i = 1
    for tempNames in offices:
        print('办公室%d的人数为:%d'%(i,len(tempNames)))
        i+=1
    
        for name in tempNames:
            print("%s"%name,end='')
    
        print("
    ")
        print("-"*20)

    运行结果如下:(结果是随机的)

    办公室1的人数为:1
    C

    --------------------
    办公室2的人数为:3
    ADG

    --------------------
    办公室3的人数为:4
    BEFH

    --------------------

    写给小白的Python之005:语句练习题答案

    1. 使用if,编写程序,实现以下功能

    _ 从键盘获取用户名、密码

    _ 如果用户名和密码都正确(预先设定一个用户名和密码),那么就显示“欢迎进入xxx的世界”,否则提示密码或者用户名错误

    username=input('请输入用户名:')
    password=input('请输入密码:')
    if username=='ma' and password=='1234':
        print('欢迎进入%s的世界'%username)
    elif username=='ma' and password!='1234':
        print('密码错误')
    elif username!='ma' and password=='1234':
        print('用户名错误')
    else:
        print('用户名和密码错误')

    2.BMI 计算

    输入一个人的身高(m)和体重(kg),根据BMI公式(体重除以身高的平方)计算他的BMI指数。

    * 例如:一個52公斤的人,身高是155cm,则BMI为 :`52(kg)/1.55^2(m)= 21.6`

    * BMI指数:
    ```
    低于18.5:过轻
    18.5-25:正常
    25-28:过重
    28-32:肥胖
    高于32:严重肥胖
    ```

    # 获取数据
    height = float(input("请输入您的身高(m)"))
    weight = int(input("请输入您的体重(kg):"))
    
    # 计算 BMI 指数值
    bmi = weight / (height ** 2)
    print("您的 BMI 指数为: %f" % bmi)
    
    # 判断
    if bmi <= 18.5:
        print("过轻")
    elif bmi < 15:
        print("正常")
    elif bmi < 28:
        print("过重")
    elif bmi < 32:
        print("肥胖")
    else:
        print("严重肥胖")

    3.个人所得税

    编写一个程序计算个人所得税(以下为个人所得税税率表,3500元起征):
    ```
    应纳税所得额(含税) 税率(%)
    不超过1500元的 3
    超过1500元至4,500元的部分 10
    超过4,500元至9,000元的部分 20
    超过9,000元至35,000元的部分 25
    超过35,000元至55,000元的部分 30
    超过55,000元至80,000元的部分 35
    超过80,000元的部分 45
    ```

    income = float(input("请输入你的收入:"))
    START = 3500
    a = income - START
    if a > 0:
        if a <= 1500:
            tax = a * 0.03
        elif a <= 4500:
            tax = (a-1500) * 0.1 + 1500 * 0.03
        elif a <= 9000:
            tax = (a-4500) * 0.2 + 3000 * 0.1 + 1500 * 0.03
        elif a <= 35000:
            tax = (a-9000) * 0.25 + 4500 * 0.2 + 3000 * 0.1 + 1500 * 0.03
        elif a <= 55000:
            tax = (a-35000) * 0.3 + (35000 - 9000) * 0.25 + 4500 * 0.2 + 3000 * 0.1 + 1500 * 0.03
        elif a <= 80000:
            tax = (a-55000) * 0.35 + (55000 - 35000) * 0.3 + (35000 - 9000) * 0.25 + 4500 * 0.2 + 3000 * 0.1 + 1500 * 0.03
        else:
            tax = (a-80000) * 0.45 +(80000 - 55000) * 0.35 + (55000 - 35000) * 0.3 + (35000 - 9000) * 0.25 + 4500 * 0.2 + 
                  3000 * 0.1 + 1500 * 0.03
        print("你的收入为:%.02f,个人所得税为:%.02f" % (income, tax))
    else:
        print("穷逼")

    结果:

    请输入你的收入:25000
    你的收入为:25000.00,个人所得税为:4370.00

     

  • 相关阅读:
    利用python数据分析与挖掘相关资料总结
    pandas库学习笔记(一)Series入门学习
    mysql error:You can't specify target table for update in FROM clause
    查询及删除重复记录的SQL语句
    PHP tripos()函数使用需要注意的问题
    如何用git上传代码到github详细步骤
    这是我的第一篇博客
    html link js
    BOM与DOM
    创建简单的表单
  • 原文地址:https://www.cnblogs.com/salmond/p/8722268.html
Copyright © 2011-2022 走看看