list & tuple

主要内容:

  • 1.列表  list
  • 2.元祖  tuple
  • 3. range

1.  列表 list

1.1 列表概述

  • 列表是python的基础数据类型之一 , 它是以[  ] 括起来, 每个元素用' , '隔开而且可以存放各种数据类型:    
  • 列表相比于字符串.,不仅可以存放不同的数据类型. 而且可以存放大量的数据.
  • 32位 python可以存放:  536870912个元素, 64位可以存放:  1152921504606846975个元素.

1.2 列表的索引和切片

  • 索引
    lst = ["上海滩","西游记","家有儿女","奥特曼","包青天","少年包青天"]
    print(lst[3])       #奥特曼
    print(lst[-4])      #家有儿女
    print(lst[-1][1:3])    #年包 
  • 切片
    lst = ["上海滩","西游记","家有儿女","奥特曼","包青天","少年包青天"]
    print(lst[1:3]) # 切片出来的是列表.#['西游记', '家有儿女']
    print(lst[1:5:2])  #['西游记', '奥特曼']
    print(lst[-1:-4:-2])   #['少年包青天', '奥特曼']

注意切最后一个元素加:才会形成list,else相当于提取元素

1.3 列表的增删改查

(1)新增:

  • append()
    lst = []
    lst.append("周杰伦") # 追加 在最后添加, 效率比较高
    lst.append("周芷若")
    lst.append("周公瑾")
    print(lst)         #['周杰伦', '周芷若', '周公瑾']
  • insert()
    lst = ["刘德华", "渣渣辉", "古天乐", "陈小春"]
    lst.insert(2,"马德华")  # 插入, 可能会导致元素移动
    print(lst)   #['刘德华', '渣渣辉', '马德华', '古天乐', '陈小春']
  • extend()迭代增加
    lst = ["刘昊然", "张一山", "徐峥", "黄渤"]
    lst.extend(["刘能", "赵四", "广坤"])
    print(lst)  #['刘昊然', '张一山', '徐峥', '黄渤', '刘能', '赵四', '广坤']
  • ! 一定要注意append和extend的用法区别:
     #对于append()若添加一个字符串就是讲字符串整体添加到list里,
     #而extend()实现此功能需要加[],若没有[],会将字符串的的每一个元素添加到list里

(2)删除 : 

  • remove()
    lst = ["刘能", "广坤", "皮长山", "大脚"]
    lst.remove("广坤")
    lst.remove("大脚")
    print(lst)     #['刘能', '皮长山']
  • pop()
    lst = ["刘能", "广坤", "皮长山", "大脚"]
    lst.pop(2)            # 可以指定元素删除(索引)
    print(lst)     #['刘能', '广坤', '大脚']
    s1 = lst.pop()        # 默认弹出最后一个
    print(s1)        #大脚
    s2 = lst.pop()
    print(s2)        #广坤
    print(lst)     #  ['刘能']
  • clear()
    lst = ["语文", "数学", "地理", "历史", "英语", "化学"]
    lst.clear() # 清空
    print(lst)     #[]
  • del
    lst = ["语文", "数学", "地理", "历史", "英语", "化学"]
    # 可以切片删除
    del lst[2]     #['语文', '数学', '历史', '英语', '化学']
    del lst[0]     #['数学', '地理', '历史', '英语', '化学']
    del lst[::2]   #['数学', '历史', '化学']
    print(lst)  
  • 注意pop()与del在格式上的区别   lis.pop()   del lis[]  虽然空白位置都是索引,但括号不同

(3)修改

  • 索引和切片的使用
    lst = ["功夫", "大话西游", "少林寺", "无间道", "战狼", "战狼2"]
    lst[2] = "西西里的美丽传说"
    lst[-3] = "新世界"
    lst[1:3] = ["一步之遥"]
    lst[1:5:2] = ["胡辣汤", "烩面"] # 注意如果步长不是1. 那么元素的个数要匹配
    print(lst)

(4)查找

  • 使用for循环
    # 列表是一个可迭代对象. 可以使用for循环
    for el in lst:
        print(el)

注: 列表根据条件进行删除

  • 直接的思维 (错误)
    lst=["渣渣辉","古天绿","周星驰","吴孟达","陈小春"]
    lst.clear()
    for el in lst: # for 内部有一个变量来记录当前被循环的位置, 索引.
        lst.remove(el) # 直接删除. 是删不干净的. 原因是每次删除都设计到元素的移动. 索引在变.
  • 正确的方式
    # 先把要删除的内容保存在一个新列表中. 循环这个新列表. 删除老列表
    lst=["渣渣辉","古天绿","周星驰","吴孟达","陈小春"]
    new_lst = []
    for el in lst:
        new_lst.append(el)
    for el in new_lst:
        lst.remove(el)
    print(lst)
  • 示例
    lst = ["张无忌", "张三丰", "张翠山", "张嘉译", '刘嘉玲', "刘能", '刘老根']
    # 删除姓张的人
    new_lst = []
    for el in lst:
        if el.startswith(""):
            new_lst.append(el)
    for el in new_lst:
        lst.remove(el)
    print(lst)

1.4 列表的相关操作

  • count()
    lst = ["马化腾", "马云", "刘强东", "周鸿祎", "李彦宏", "马云", "马云"]
    print(lst.count("马云"))     #3

    注意count是对list的操作,会得到新的结果

  •  sort()
    lst = [1, 8, 12, 1, 4, 6, 3]
    lst.sort()    # 排序. 默认升序
    print(lst)     #[1, 1, 3, 4, 6, 8, 12]
    lst = [1, 8, 12, 1, 4, 6, 3]
    lst.sort(reverse=True)  # 倒叙排序
    print(lst)      #[12, 8, 6, 4, 3, 1, 1] 
  • reverse()

    lst = [1, 8, 12, 1, 4, 6, 3]
    lst.reverse()  # 翻转
    print(lst)       #[3, 6, 4, 1, 12, 8, 1]
  • len()

    lst = [1, 8, 12, 1, 4, 6, 3]
    print(len(lst))  # 求长度, 和字符串一样   #7

1.5  列表的嵌套

lst = ["周润发", "周星驰", "周笔畅", "周公瑾", ["九品芝麻官", ["吴孟达", "alex", "林雪"],"算死草", "赌侠", "赌圣", "整蛊专家"]]
lst[4][1][1] = lst[4][1][1].capitalize()
print(lst)

2. 元组

2.1 元组的基本概念

  • 元组就是不可变的列表, 元组使用()表示, 元素与元素之间使用逗号隔开, 数据类型没有限制, 只读列表   第一层不可变
    huang = ("努尔哈赤", "皇太极", "顺治", "康熙", "雍正", "乾隆", "嘉庆")
    # huang[1] = "朱元璋" # 报错 'tuple' object does not support item assignment
    print(huang)

    注:元组的不可变的意思是子元素不可变. 而子元素内部的子元素是可 以变, 这取决于子元素是否是可变对象

  • 另外:

    # 小括号在计算机里还表示算数优先级
    # print((8+3)*7)
    tu = (1,) # 加了逗号, 就是元组了
    tu = ("哈哈","呵呵","嘿嘿",)
    print(type(tu))
    lst = list()  # []
    tu = tuple()  # 空元组

2.2 元祖的索引和切片:  

  • 索引
    # 元组也有索引和切片 和列表一样和字符串也一样
    tu = ("iphone", "nokia", "砸核桃", "Lenovo", "HTC", "Honor")
    print(tu[-1])   # Honor    
    print(tu[1:3])  #('nokia', '砸核桃')
    print(tu[1:5:2])  #('nokia', 'Lenovo')
  • 切片
    # 不可变指的是第一层元素不可变, 第二层取决于你的数据类型
    tu = (1, 2, 5, ["胡辣汤", "滋滋冒油的大猪蹄子", "酱猪肘", "香喷喷的米饭", "脆皮炸鸡"])
    tu[3].append("锅包肉")
    print(tu)

2.3 遍历

tu = ("孙悟空", "白骨精", "哪吒", "二师兄", "妲己")
for el in tu:  # element 元素
    print(el)

5. range:

  • range(边界) 从0到边界
    # range()
    for i in range(10):  # 0-9   没有10(切记)
        print(i)
  • range(start, end) 从start到end ,不能到end
    for i in range(3, 8): # 从3-8 没有8
        print(i)
  • range(start, end, step) 从start到end. 步长是step
    for i in range(5, 10, 2): # 从5 到 10 步长是2
        print(i)

另外:

 lst = ["张无忌", "张三丰", "张翠山", "张一山", "张磊", "张伟", "张角"]
# # for el in lst: # 这样循环. 没有索引
# #     print(el)
#
for i in range(len(lst)):  # 有索引了
     print(lst[i])

 

posted @ 2018-09-06 23:28  一路向北_听风  阅读(265)  评论(0编辑  收藏  举报