7.Python基础数据类型之列表

Python基础数据类型之列表(容器型数据类型)

  1. 列表

    • 列表是Python中最基本的数据结构,是一个容器型的数据类型,可以盛放任何数据类型。列表中的每个元素都分配一个位置,叫做索引,第一个位置的索引是0,第二个位置的索引是1,依此类推。
  2. 列表的创建

    • 方法一(直接加中括号)

      l = [1, "Python"]
      
    • 方法二(使用list()方法)

      l = list("Python")
      print(l)
      # 输出结果: ['P', 'y', 't', 'h', 'o', 'n']
      
      # 注意:list()内必须是一个可迭代的对象
      
  3. Python列表(list)的增、删、改、查

    • 增:

      有三种方式:

      • append(追加,只能追加到最后)

        用法:

        l = ["Python", "列表", "增", "删", "改", "查"]
        l.append("学习")
        print(l)
        # 输出结果:['Python', '列表', '增', '删', '改', '查', '学习']
        # 不能通过 print(l.append) 这种方式进行打印
        

        应用场景举例:

        user_list = []
        while 1:
            add_user = input("请输入需要增加的用户名(按Q或q退出):").strip()
            if add_user.upper() == "Q":
                print("程序退出!")
                break
            else:
                user_list.append(add_user)
                print("用户已添加!")
                print(user_list)
        
      • insert(可以指定位置插入)

        用法:

        l = ["Python", "列表", "增", "删", "改", "查"]
        l.insert(2, "的")
        print(l)
        # 输出结果:['Python', '列表', '的', '增', '删', '改', '查']
        
      • extend(迭代追加)

        用法:

        l = ["Python", "列表", "增", "删", "改", "查"]
        l.extend('学习')
        print(l)
        # 输出结果:['Python', '列表', '增', '删', '改', '查', '学', '习']
        
        l = ["Python", "列表", "增", "删", "改", "查"]
        l.extend(["学习", ])
        print(l)
        # 输出结果:['Python', '列表', '增', '删', '改', '查', '学习']
        
    • 删:

      有六种方式:

      • pop(按照索引位置删除)

        用法:

        l = ["Python", "列表", "增", "删", "改", "查"]
        l.pop()
        print(l)    # 默认删除最后一个元素
        # 输出结果:['Python', '列表', '增', '删', '改']
        
        l = ["Python", "列表", "增", "删", "改", "查"]
        l.pop(3)
        print(l)
        # 输出结果:["Python", "列表", "增", "改", "查"]
        
        l = ["Python", "列表", "增", "删", "改", "查"]
        print(l.pop(3)) # pop具有返回值,返回的是删除的元素
        # 输出结果:删
        
      • remove(按照指定元素删除,如果有重复元素,默认从左往右删除第一个)

        用法:

        l = ["Python", "列表", "增", "删", "改", "查"]
        l.remove("删")   # 没有返回值
        print(l)
        # 输出结果:['Python', '列表', '增', '改', '查']
        
      • del(列表、字典通用,可按照索引、切片删除)

        用法:

        # 按照索引删除
        l = ["Python", "列表", "增", "删", "改", "查"]
        del l[3]
        print(l)
        # 输出结果:['Python', '列表', '增', '改', '查']
        
        # 按照切片删除
        l = ["Python", "列表", "增", "删", "改", "查"]
        del l[::2]
        print(l)
        # 输出结果:['列表', '删', '查']
        
      • clear(清空列表中的所有元素)(了解)

        用法:

        l = ["Python", "列表", "增", "删", "改", "查"]
        l.clear()
        print(l)
        # 输出结果:[]
        
      • for循环删除

        注意:在使用for循环按照索引删除列表元素的时候,一定要注意正向步长删除会引起元素索引的变化,导致删除结果错误,因此为保证for循环按照索引删除元素时索引变化不影响删除结果,一般采用反向步长,从后往前删,此方法称之为“倒叙删除法”。

        (在循环一个列表时,最好不要改变一个列表的大小,这样有可能会影响最终的结果。)

        用法:

        l = [1, 2, 3, 4, 5, 6]
        # 删除列表中索引为奇数位置的元素
        for i in range(len(l)-1,-1,-1):
            if i % 2 == 1:
                l.pop(i)
        print(l)
        # 输出结果:[1, 3, 5]
        
      • 思维置换法(思路,从列表中取得想要的值产生新的列表,然后用新的列表替换原有列表)

        用法:

        l = [1, 2, 3, 4, 5, 6]
        # 删除列表中的1,3,4,6
        list_1 = [l[1]]
        list_2 = [l[-2]]
        l = list_1 + list_2
        print(l)
        # 输出结果:[2, 5]
        
    • 改:

      • 按照索引改值

            l = ["Python", "列表", "增", "删", "改", "查"]
            l[4] = "按照索引改值"
            print(l)
            # 输出结果:['Python', '列表', '增', '删', '按照索引改', '查']
        
      • 按照切片改值(了解)

            l = ["Python", "列表", "增", "删", "改", "查"]
            l[2:] = "按照切片改值"
            print(l)
            # 输出结果:['Python', '列表', '按', '照', '切', '片', '改', '值']
        
        l = ["Python", "列表", "增", "删", "改", "查"]
            l[::2] = "abc"  # 切片加步长,就必须将迭代的元素与修改的值对应上,即改几个元素就得写几个元素。
            print(l)
            # 输出结果:['a', '列表', 'b', '删', 'c', '查']
        
    • 查:

      • 按照索引查询

      • 按照切片查询

      • for循环查询

        用法:

            l = ["Python", "列表", "增", "删", "改", "查"]
            for i in l:
                print(i)
            '''
            输出结果:
            Python
            列表
            增
            删
            改
            查
            '''
        
  4. 列表的嵌套

    l = [1, ["Python", ["列", "表"], "的", "嵌套"]]
    
    • 将列表中的 "Python" 变成大写

      l = [1, ["Python", ["列", "表"], "的", "嵌套"]]
      l[1][0] = l[1][0].upper()
      print(l)
      # 输出结果:[1, ['PYTHON', ['列', '表'], '的', '嵌套']]
      
    • 给列表 l 中的列表 ["列", "表"] 增加一个元素"&"

      l = [1, ["Python", ["列", "表"], "的", "嵌套"]]
      l[1][1].insert(1,"&")
      print(l)
      # 输出结果:[1, ['Python', ['列', '&', '表'], '的', '嵌套']]
      
    • 给列表 l 中的 ["列", "表"] 通过字符串拼接的方式变成 ["列", "表的"],并删除列表 l 中的 "的" 元素

      l = [1, ["Python", ["列", "表"], "的", "嵌套"]]
      l[1][1][1] = l[1][1][1] + "的"   # 等号左边的 l[1][1][1] 表示要改元素"表"
      l[1].pop(2)
      print(l)
      # 输出结果:[1, ['Python', ['列', '表的'], '嵌套']]
      
      # 代码可以精简成:
      l = [1, ["Python", ["列", "表"], "的", "嵌套"]]
      l[1][1][1] += "的"   # count = count + 1 可以简写成 count += 1
      l[1].pop(2)
      print(l)
      # 输出结果:[1, ['Python', ['列', '表的'], '嵌套']]
      
    • 给列表 l 中的列表 ["列", "表"] 变成字符串 "列表"

      l = [1, ["Python", ["列", "表"], "的", "嵌套"]]
      l[1][1] = "".join(l[1][1])
      print(l)
      # 输出结果:[1, ['Python', '列表', '的', '嵌套']]
      
  5. 列表的内置方法

    • count:计算列表中指定元素出现的次数

      l = ["Python", "列表", "的", "内置", "方法"]
      print(l.count("Python"))
      #输出结果:1
      
    • index:找到指定元素在列表中的索引位置

      l = ["Python", "列表", "的", "内置", "方法"]
      print(l.index("的"))
      #输出结果:2
      
    • sort:给列表中的数字或字符串进行排序,且列表中不能既有数字也有字符串,字符串按照字幕的顺序排序,一般用于数字排序。默认从小到大排序。

      # 从小到大排列
      l = [3,2,5,4,6,8,7,9]
      l.sort()
      print(l)
      #输出结果:[2, 3, 4, 5, 6, 7, 8, 9]
      
      # 从大到小排列
      l = [3,2,5,4,6,8,7,9]
      l.sort(reverse=True)
      print(l)
      #输出结果:[9, 8, 7, 6, 5, 4, 3, 2]
      
    • reverse:反转排序

      l = [3,2,5,4,6,8,7,9]
      l.reverse()
      print(l)
      #输出结果:[9, 7, 8, 6, 4, 5, 2, 3]
      
  6. 列表的运算(Python 3.4之后的列表支持相加和与数字相乘)

    • 列表相加

      list_1 = ["Python", "列表", 3, 2, "的", "内置", "方法"]
      list_2 = [3,2,5,4]
      print(list_1 + list_2)
      # 输出结果:['Python', '列表', 3, 2, '的', '内置', '方法', 3, 2, 5, 4]
      
    • 列表与数字相乘

      l = [1, 2]
      print(l * 3)
      #输出结果:[1, 2, 1, 2, 1, 2]
      
  7. 列表推导式(可以用一行代码快速创建一个比较复杂且有规律的列表)

    • 循环模式([变量1 for 变量2 in 可迭代对象]

      # 创建一个包含数字1到10的列表
      l = []
      for i in range(1,11):
         l.append(i)
      print(l)    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      
      # 使用列表推导式
      l = [i for i in range(1,11)]
      print(l)    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      
      # 构建一个Python-1到Python-100的列表
      l = [f'Python-{i}' for i in range(1,101)]
      print(l)
      
    • 筛选模式([变量1 for 变量2 in 可迭代对象 if 判断条件]

      # 创建一个包含从1到10中所有偶数的列表
      l = [i for i in range(1,11) if i % 2 == 0]
      print(l)    # [2, 4, 6, 8, 10]
      
      # 将含有两个o的所有单词留下,组成一个新的列表(没有使用列表推导式)
      word_list = [
         ['food','eat','foot','hand'],
         ['dog','bear','root','colour']
      ]
      
      l = []
      for i in word_list:
         for word in i:
            if word.count('o') == 2:
               l.append(word)
      print(l)
      
      # 将含有两个o的所有单词留下,组成一个新的列表(使用列表推导式)
      word_list = [
         ['food','eat','foot','hand'],
         ['dog','bear','root','colour']
      ]
      
      l = [word for i in word_list for word in i if word.count('o') == 2]
      print(l)
      
    • 列表推导式的优缺点

      • 优点:

        • 一行构建,简单

          # 用一行代码构建一个列表:[2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']
          l = [i for i in range(2,11)] + list('JQKA')
          # 就问你牛逼不牛逼?!!!
          
      • 缺点

        • 列表推导式只能构建比较复杂且有规律的列表,注意,是有规律的列表;
        • 超过三层循环才能构建成功的列表,就不建议使用列表推导式了;
        • 无法开启debug模式,也就是说进行Trouble Shooting时会相对来说困难些。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容