美文网首页
2、列表

2、列表

作者: Yerban | 来源:发表于2018-10-16 17:47 被阅读0次

    列表

    列表的特点:

    • 有序;
    • 编号,可以通过编号访问;
    • 可遍历;
    • 可追加/可插入;
    • 可删除/可弹出;
    • 可修改;
    • 长度不定
    # coding: utf-8
    users = ['HL', 10, 20.3, True, False, [1, 2, 3]]
    # 遍历列表users
    for name in users:
        print(name)
    
    # type查看数据类型
    print(type(users))
    
    # 打印列表第一个元素,索引为0
    print(users[0])
    
    # 打印列表第三个元素,索引为2
    print(users[2])
    
    # 打印列表最后一个元素,索引为-1
    print(users[-1])
    
    # 打印列表最后二个元素,索引为-2
    print(users[-2])
    
    # 修改索引为"1"的值
    users[1] = 'Fish'
    print(users)
    

    list() 方法用于将可迭代对象转换为列表

    print(list('1234567'))
    print(list('abcdefg'))
    
    # str是可迭代对象,int、float不是
    # print(list(4.5)) 错误
    # print(list(123456)) 错误
    
    

    range() 函数可创建一个整数列表

    • range(start, stop, step)
    • 默认start=0,步长step=1
    print(list(range(10)))
    for i in range(10):
        print(i)
    
    print(list(range(0, 10)))
    # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    print(list(range(1, 10, 2)))
    # [1, 3, 5, 7, 9]
    
    print(list(range(9, 2, -3)))
    # [9, 6, 3]
    
    

    作业1:打印乘法口诀

    • 提示:使用for
    for column in range(1, 10):
        for row in range(1, 10):
            if row <= column:
                print('%d * %d = %2d' % (row, column, row * column), end='\t')
        print('\n')
    

    作业2:nums2 = [6, 11, 7, 9, 4, 2, 1]列表中找到最大的

    • 从nums中拿到第一个数字放到变量hand中
    • 从第二个元素开始比较,如果比hand值大,则从新赋值
    nums2 = [6, 11, 7, 9, 4, 2, 1]
    hand = nums2[0]
    for i in nums2:
        if hand < i:
            hand = i
    print(hand)
    
    # 变量hand为None,None => 什么都没有
    # 从第一个元素开始比较,如果hand为None或者比hand值小,则从新赋值
    
    nums2 = [6, 11, 7, 9, 4, 2, 1]
    hand = None
    for i in nums2:
        if hand is None or hand > i:
            hand = i
    print(hand)
    

    作业3:冒泡排序

    • 移动nums中最大的数字到最后
    • 提示:从左到右依次两两比较,如果前面比后面大,则交换位置。
    • 第一次:6和11比较,前面小不交换,[6, 11, 7, 9, 4, 2, 1]
    • 第二次:11和7比较,前面大交换,[6, 7, 11, 9, 4, 2, 1]
    • 第三次:11和9比较,前面大交换,[6, 7, 9, 11, 4, 2, 1]
    • 第四次:11和4比较,前面大交换,[6, 7, 9, 4, 11, 2, 1]
    • 第五次:11和2比较,前面大交换,[6, 7, 9, 4, 2, 11, 1]
    • 第六次:11和1比较,前面大交换,[6, 7, 9, 3, 2, 1, 11]

    交换方法

    • tmp = a; a = b; b = tmp
    • a, b = b, a
    '''
    思路:
    1、比较多少次 n-1
    2、依次两两比较
    for i in range(n-1)
        nums[i], nums[i+1] = nums[i+1], nums[i]
    3、如何进行交换
        (1)tmp = a; a = b; b = tmp
        (2)a, b = b, a
    '''
    nums2 = [6, 11, 7, 9, 4, 2, 1]
    hand2 = nums2[0]
    
    for j in range(len(nums2)-1):
        for i in range(len(nums2)-1):
            if nums2[i] > nums2[i+1]:
                nums2[i], nums2[i+1] = nums2[i+1], nums2[i]
        print(nums2)
    

    获取list特殊值

    # 获取list元素的数量
    print(len(nums2))
    
    # 获取list元素中的最大值和最小值
    print(max(nums2))
    print(min(nums2))
    
    # 判断元素是否在list中存储
    print(1 in nums2)
    print(1 not in nums2)
    print(12 in nums2)
    
    

    赋值交换

    x, y, z = 3, 6, 9
    print(x, y, z)
    x, y, z = y, z, x
    print(x, y, z)
    

    列表四则运算

    nums2 += nums2
    print(nums2)
    nums3 = nums2 + [0, 0, 0]
    print(nums3)
    nums4 = nums2 * 2
    print(nums4)
    

    切片

    • 按照规则获取list中一部分元素生成新的list
    '''
    list[start:end:step]
    list[::step]
    list[start:end]
    list[:end]
    list[start:]
    list[:]
    '''
    nums5 = list(range(10))
    print(nums5[1:9:2])
    # [1, 3, 5, 7]
    
    print(nums5[::5])
    # [0, 5]
    
    print(nums5[1:5])
    # [1, 2, 3, 4]
    
    print(nums5[:5])
    # [0, 1, 2, 3, 4]
    
    print(nums5[5:])
    # [5, 6, 7, 8, 9]
    
    print(nums5[:])
    # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    # 翻转list
    print(nums5[::-1])
    # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    
    print(nums5[5::-1])
    # [5, 4, 3, 2, 1, 0]
    
    # 翻转list
    print(nums5[::-1])
    # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    
    print(nums5[5::-1])
    # [5, 4, 3, 2, 1, 0]
    
    # 获取所有偶数索引
    print(nums5[::2])
    # [0, 2, 4, 6, 8]
    
    # 获取所有奇数索引
    print(nums5[1::2])
    # [1, 3, 5, 7, 9]
    
    # 获取所有倒序的奇数索引
    print(nums5[::-2])
    # [9, 7, 5, 3, 1]
    
    # 获取所有倒序的偶数索引
    print(nums5[-2::-2])
    # [8, 6, 4, 2, 0]
    
    

    切片复制(详见2.1)

    # 对象赋值,直接改变了原来的nums5
    nums5 = list(range(10))
    nums5_tmp = nums5
    nums5_tmp[0] = 'HL'
    
    print(nums5_tmp)
    # ['HL', 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    print(nums5)
    # ['HL', 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    # python提供了一个id()函数,用于查询内存地址
    print(id(nums5_tmp))
    # 4443399944
    print(id(nums5))
    # 4443399944
    
    # 复制,使用切片,不会直接改变原来的nums5
    nums5 = list(range(10))
    nums5_tmp = nums5[:]
    nums5_tmp[0] = 'Fish'
    print(nums5_tmp)
    # ['Fish', 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    print(nums5)
    # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    print(id(nums5_tmp))
    # 4507257288
    
    print(id(nums5))
    # 4507260680
    
    

    切片对list增删修改

    切片的应用

    • 语法:list_name[start:end] = [v_0, v_1, ..., v_n]
      使用list_name[v_0, v_1, ..., v_n]替换切片对应的位置的元素
    • 当切片元素大于[v_0, v_1, ..., v_n]的数量按照顺序替换切片中的元素,切片中多余的元素将删除
    • 当切片元素小于[v_0, v_1, ..., v_n]的数量,按照顺序替换切片中的元素,赋值list中多余的元素则添加到切片最右索引之后
    nums5 = list(range(10))
    
    # 对索引1-3进行更改
    nums5[1:4] = ['a', 'b', 'c']
    print(nums5)
    # [0, 'a', 'b', 'c', 4, 5, 6, 7, 8, 9]
    
    # 对索引4-6进行删除
    nums5[4:7] = []
    print(nums5)
    # [0, 'a', 'b', 'c', 7, 8, 9]
    
    # 在索引4处进行添加
    nums5[4:4] = ['e', 'f', 'g', 'h']
    print(nums5)
    # [0, 'a', 'b', 'c', 'e', 'f', 'g', 'h', 7, 8, 9]
    
    
    
    # 情况一、将切片中多余的元素删除掉了。原本索引4-7有四个元素,对索引4-7赋了3值,所以多余的元素删除掉了。
    print(nums5[4:8])
    # ['e', 'f', 'g', 'h']
    nums5[4:8] = ['a', 'b', 'c']
    print(nums5)
    # [0, 'a', 'b', 'c', 'a', 'b', 'c', 7, 8, 9]
    
    # 情况二、在索引list[:4]处依次增加多余的元素。原本索引1-3有3个元素,对索引1-3赋了5个值,依次增加多出来的元素将排在最大索引后面。
    print(nums5[1:4])
    # ['a', 'b', 'c']
    nums5[1:4] = ['e', 'f', 'g', 'h', 'i']
    print(nums5)
    # [0, 'e', 'f', 'g', 'h', 'i', 'a', 'b', 'c', 7, 8, 9]
    

    列表函数

    dir()是查看有哪些函数,help()查询函数的用法

    • append:添加元素到list最右侧
    • clear:清空list中的元素
    • copy:复制list中的所有元素到新list中并返回
    • count:计算list中存在相同元素的数量
    • extend:将一个可遍历数据中的所有元素最佳到list后
    • index:获取元素在list中出现的位置
    • insert:在list指定位置添加元素
    • pop:弹出list中指定位置的元素(默认最右侧)
    • remove:移除list中指定的元素
    • reverse:对list中元素进行反转
    • sort:对list中元素进行排序
    • 查看帮助
    # dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。
    print(dir(list))
    
    # help() 函数用于查看函数或模块用途的详细说明。
    print(help(list.append))
    print(help(list.clear))
    
    • append:添加元素到list最右
    nums6 = list(range(5))
    
    nums6.append('abc')
    print(nums6)
    # [0, 1, 2, 3, 4, 'abc']
    nums6.append(['abc'])
    print(nums6)
    # [0, 1, 2, 3, 4, 'abc', ['abc']]
    nums6.append([1, 2, 'abc'])
    print(nums6)
    # [0, 1, 2, 3, 4, 'abc', ['abc'], [1, 2, 'abc']]
    
    • extend:将一个可遍历数据中的所有元素最佳到list后
    nums6 = list(range(5))
    nums6.extend('abc')
    print(nums6)
    # [0, 1, 2, 3, 4, 'a', 'b', 'c']
    nums6.extend(['abc'])
    print(nums6)
    # [0, 1, 2, 3, 4, 'a', 'b', 'c', 'abc']
    nums6.extend([1, 2, 'abc'])
    print(nums6)
    # [0, 1, 2, 3, 4, 'a', 'b', 'c', 'abc', 1, 2, 'abc']
    
    • append会将添加的list当成一个整体添加到list中去;append 接受一个参数,这个参数可以是任何数据类型,并且简单地追加到 list 的尾部。
    • extend是将添加的list当成单独的元素添加到list中;extend 接受一个参数,这个参数总是一个 list,并且把这个 list 中的每个元素添加到原 list 中。
    • clear:清空list中的元素
    nums6 = list(range(5))
    nums6.clear()
    print(nums6)
    # []
    
    # 和切片清空的方式对比
    nums6 = list(range(5))
    nums6[:] = []
    print(nums6)
    # []
    
    • copy:复制list中的所有元素到新list中并返回,详见2.1Python深拷贝与浅拷贝。
    nums6 = list(range(5))
    print(nums6)
    nums7 = nums6.copy()
    print(nums7)
    nums7[1] = 'HL'
    print(nums7)
    print(nums6)
    
    # 和切片复制的方式对比
    nums6 = list(range(5))
    print(nums6)
    nums7 = nums6[:]
    nums7[1] = 'Fish'
    print(nums7)
    print(nums6)
    
    • count:参数是任意类型,返回值是int类型,获取元素在list中出现的次数,list中没有时,返回0。
    nums6 = list(range(5))
    print(nums6)
    
    nums6.extend([2])
    nums6.extend([2, 2])
    nums6.extend('22')
    nums6.append(22)
    nums6.append('22')
    print(nums6)
    # [0, 1, 2, 3, 4, 2, 2, 2, '2', '2', 22, '22']
    
    print(nums6.count(2))
    # 4
    print(nums6.count('2'))
    # 2
    print(nums6.count('a'))
    # 0
    
    • index:参数是任意类型,返回值是int类型,获取元素在list中出现的位置,不存在则报错,可以指定查找list的start和end范围。
    • str.index(str, beg=0, end=len(string))
    print(nums6.index(2))
    # 2
    print(nums6.index('2'))
    # 8
    print(nums6.index('2', 9))
    # 9
    
    • pop:参数是整数,返回值是从list中弹出的元素。根据索引删除list中的元素,并返回,若索引不存在,则报错。pop默认是从最右侧删除。
    print(nums6)
    # [0, 1, 2, 3, 4, 2, 2, 2, '2', '2', 22, '22']
    
    nums6.pop()
    print(nums6)
    # [0, 1, 2, 3, 4, 2, 2, 2, '2', '2', 22]
    
    nums6.pop(0)
    print(nums6)
    # [1, 2, 3, 4, 2, 2, 2, '2', '2', 22]
    
    nums6.pop(6)
    print(nums6)
    # [1, 2, 3, 4, 2, 2, '2', '2', 22]
    
    • remove:参数是任意类型,没有返回值。从list中删除指定的值(第一次出现的元素),若值不存在,则报错。
    nums6.remove('2')
    print(nums6)
    # [1, 2, 3, 4, 2, 2, '2', 22]
    
    # 删除列表中元素
    # 根据索引删除列表中元素
    del nums6[0]
    print(nums6)
    # [2, 3, 4, 2, 2, '2', 22]
    
    del nums6[-1]
    print(nums6)
    # [2, 3, 4, 2, 2, '2']
    
    
    • 堆栈:先入后出
    • append:从最右侧添加
    • pop():从最右侧删除
    • 队列:先入先出
    • append:从最右侧添加
    • pop(0):从最左侧删除
    • reverse:对list中元素进行反转。参数类型无,返回值无。
    nums6 = list(range(5))
    nums6.reverse()
    print(nums6)
    # [4, 3, 2, 1, 0]
    
    # 和切片对比
    nums6 = list(range(5))
    nums7 = nums6[::-1]
    print(nums7)
    # [4, 3, 2, 1, 0]
    
    • sort:排序规则,是否反转。返回值无。对list中元素进行排序。
    nums7.sort()
    print(nums7)
    # [0, 1, 2, 3, 4]
    
    • insert:当索引大于或小于list原本的索引时,则在list对应的两端增加元素。索引不存在不会报错。
    nums7.insert(-1000, 520)
    print(nums7)
    # [520, 0, 1, 2, 3, 4]
    
    nums7.insert(10000, 'LOVE')
    print(nums7)
    # [520, 0, 1, 2, 3, 4, 'LOVE']
    
    • 练习1、todolist
    • 提示用户输入do或者任务(非do)
    • 如果用户输入任务,则添加到list中
    • 如果用户输入do,当任务为空时,则打印无任务并退出,否则从list中根据先进先出原则打印任务。
    1. 存储所有的任务用list,tasks
    2. while循环
    3. input
    4. 输入非do,append
      输入do,按照先进先出的原则,(检查list是否为空,为空则打印无任务并打印退出)把任务弹出,并打印
    tasks = []
    while True:
        tasks_name = input('Please input do or your a tasks:')
        if tasks_name == 'do':
            if len(tasks) == 0:
                print('Tasks is None.')
                break
            else:
                print(tasks.pop(0))
        elif len(tasks_name) == 0:
            continue
        else:
            tasks.append(tasks_name)
            print(tasks)
    
    • 练习2、获取两个list中相同的元素到第三个列表中
    • nums8 = [1, 2, 3, 4, 5, 3, 10, 11]
    • nums9 = [1, 2, 3, 1, 4, 5, 5, 3, 12, 34]
    • 保证第三个list中元素不重复
    1. 定义第三个list,nums10
    2. 对第一个list进行遍历
    3. 从第一个list中依次取元素,和第二个list的对比
      重复的放到第三个list
    print('###### my execrcises ######')
    nums10 = []
    nums8 = [1, 2, 3, 4, 5, 3, 10, 11]
    nums9 = [1, 2, 3, 1, 4, 5, 5, 3, 12, 34]
    for i in nums8:
        if nums9.count(i) > 0 and nums10.count(i) == 0:
            nums10.append(i)
    print(nums10)
    
    print('###### teacher execrcises ######')
    result = []
    nums8 = [1, 2, 3, 4, 5, 3, 10, 11]
    nums9 = [1, 2, 3, 1, 4, 5, 5, 3, 12, 34]
    for i in nums8:
        if i in nums9 and i not in result:
            result.append(i)
    print(result)
    

    相关文章

      网友评论

          本文标题:2、列表

          本文链接:https://www.haomeiwen.com/subject/snohzftx.html