容器类型:列表和元组

容器类型:列表和元组

数据收纳盒

  • 用来收纳数据对象的数据类型
  • 以一种规则的下标索引方式(收纳盒名字+ 数字序号)访问到每个数据
  • 这种收纳盒是一种序列
  • 列表可以删除、添加、替换、重排序列中的元素(可变类型)
  • 元组是不能再更新(不可变)序列
    • 元组在保留列表大多数功能的同时,去掉了一些灵活性以换取更高的处理性能
    • 不可变意味着不支持增删改查
    • 有序的意味着支持下标操作

列表和元组的创建

创建列表

  • 方括号法 [],指明类型法 list()
  • 所有的容器型数据类型的数据都可以转换成列表
  • 将容器中的元素全部转换成列表中的元素

创建元组

  • 圆括号法(),指明类型法tuple()

列表或元组中保存的各个数据称作 元素(element),类型没有限制

# 元组中表示为空
tuple1= () # () 
print(tuple1,type(tuple1))

# 元组中的单个元素表示
tuple3 = (10) #10 
print(tuple3,type(tuple3))
tuple3 = (10,) #(10,) 
pritn(tuple3,type(tuple3))

#多个元素的元组表示
tuple4 = (100,200,300) #
tuple5 = 10,23,34,45   # 变量 = item1,item....item
print(tuple5,type(tuple5) # (10, 23, 34, 45) 

score = [60,67,78,56,78,90]
list1 = [90,'abc',True,[1,2,3]]

列表和元组的操作

列表的操作:增长/缩减

增长列表

  • append操作/insert操作/extend操作

    list1.extend(list2) # 在原列表上改变
    list1.extend('abc') # 字符串也是容器类型

缩减列表

  • pop操作/remove操作/clear操作

列表是一种可变容器,可以随意增减

但并不是所有的数据容器都能像列表 这样可以继续添加新元素

列表的操作:重新组织

reverse / sort 操作

  • reverse:把列表中的数据元素头尾反转重新排列
  • sort:把列表中的数据元素按照大小顺序重新排列

reversed / sorted 操作

  • reversed(alist) / sorted(alist) 得到重新排列的列表,而不影响原来的列表

  • sorted(列表,reverse=True) 将列表中的元素从大到小排列产生一个新的列表

    nums = [12,32,34,54]
    new_nums = reversed(nums)
    print(nuw_nums) #

列表的操作:大小比较

  • 能比较的前提是,比较的数据是相同类型

能比较的前提是比较的数据是相同类型

  • 从第一个元素顺序开始比较,如果相等,则继续。返回第一个不相等元素比较的结果。

  • 如果所有元素比较均相等,则长的列表大,一样长则两列表相等

    list1 = ['abc', 100, 200, 50]
    list2 = ['100',50, 100]
    print(list1>list2) #TypeError: '>' not supported between instances of 'str' and 'int'

列表方法

见表格

方法名称 使用例子 说明
append(追加) alist.append(item) 列表末尾添加元素
insert(插入) alist.insert(i,item) 列表中i位置添加元素
del del alist(i) 删除列表中第i个元素(下标要存在)
remove alist.remove(item) 将item首次出现删除;如果元素不存在,会报错
pop alist.pop() 删除列表中的最后一个元素并返回其值
pop alist.pop(i) 删除列表中的第i个元素,并返回其值
sort alist.sort() 将表中元素排序
reverse alist.reverse() 将表中元素反向排序
index alist.index() 找到item的首次出现位置
count alist.count() 返回item在列表中出现的次数
clear alist.clear() 清空列表里的数据
copy alist.copy() 复制列表中所有元素,产生一个新列表

alist = [10,20,30,40,50,40]

alist.append(100)
alist.insert(1,100)
del alist(i)
alist.remove(40)

列表推导式

[ 表达式 for 变量 in 序列 ]

  • 让变量去序列中取值,每取一个值就创建列表中的一个元素,元素的值就是表达式的值

    alist= [1 for x in range(4)]
    print(alist)
    list = [2*x for x in range(4)]
    print(alist)

[ 表达式 for 变量 in 序列 if 条件语句 ]

  • 让变量去序列中取值,每取一个值就判断一次条件语句是否为true,为True就创建列表中的一个元素,元素的值就是表达式的值

    list6 = [x for x in range(6) if x & 1 == 0]
    list7 = [x**2 for x in range(10) if x % 2] # x%2 返回的是布尔值 只要表达式有值就可以判断
    print(list)

[表达式 for 变量1 in 序列1 for 变量2 in 序列2 ]

for 变量1 in 序列1:
    for 变量2 in 序列2:
        产生元素

[表达式 for 变量1 in 序列1 for 变量2 in 序列2 if 条件语句 ]

列表与元组的操作

合并

  • 加法运算+:连接两个列表/元组 ,然后产生一个新列表,这一点与extend不同
  • 乘法运算*:复制n次,生成新列表/元组 (这里的n是正整数)

列表/元组大小

  • len():列表/元组中元素的个数

列表与元组的操作:索引/切片

索引(下标)

alist[n] 或 atuple[n]

  • 利用下标修改元素的值
    • 可以用赋值语句给列表中的任何一个位置重新赋值
    • 但元组属于不可变类型,索引只能 获取 对应位置中的数据值,不可重新赋值
  • 利用下标获取列表值
    • 是用来表示有序序列中元素的位置(顺序)。

    • 列表中的每个元素都有固定的下标来表示这个元素在列表中的位置

    • python列表中的每个元素有两种下标值,一种是正的下标值(从0开始),另一种是负的下标值(从-1开始,以此减少,-1表示是最后一个元素)

    • 下标不能超出列表下标的范围

      names = ['小孩', '老虎', '枪']
      print(names[0],names[-1])
      print(names[10]) # IndexError: List index out of range

      names = '老友记','权利的游戏','杀死伊芙','兄弟连','维京传奇','亿万','傲骨传奇'

      用变量获取

      tuple6 = (10,78,45)
      a,b,c = tuple6 # 获取,变量与元素数量相等
      print(a,b,c)

      获取,变量与元素数量不相等时

      person = '施瓦辛格','男',100,101,102
      name, gender,*num = person
      print(name, gender,num)

      * 的作用 打包和解包·

      print(num)
      print(*num)

      列表相关操作全部适用于元素

切片

alist[start : end : step]

atuple[start : end : step]

  • start,end指的是下标值(这个数值表示列表元素位置,与数轴上的数字位置不同),整数,

  • step是整数,正值是从左往右取,负值是从右往左取

    names = ['小孩', '老虎', '枪','胡萝卜','大棒']
    print(names[1:3:1]) # ['老虎','枪']
    print(names[-4:3:1]) # ['老虎','枪']
    print(names[1:-1:2])
    print(names[-1,1,1]) # []

    取出末尾三位

    print(names[2:5:1]) #这里下标越界是可以的

    省略写法

    print(names[1:4]) #省略步长
    print(names[:1:4]) # 省略开始下标
    print(names[:-1]) #省略开始下标和步长
    print(names[:2,-1]) # 步长为负,从最后一个元素从后往前
    print([names[:0:-2]])
    print([names[-3:]]) # 省略结束下标和步长,结束下标会去到最后一位
    print(names[-1::2]) # ['大棒']
    print(names[::-1]) #列表倒叙的简单写法
    print(names[:]) # 列表的copy

  • 切片的省略写法

    • 省略步长
  • 省略开始下标

    • 步长为正,从第一个元素从前往后取
    • 步长为负,从最后一个元素从后往前
  • 省略开始下标和步长

    • 省略结束下标(相当于越界)
      • 步长为正,从开始下标取到最后一个下标位置的元素
      • 步长为负,从最后一个位置起到开始下标位置的元素
  • 遍历列表

    • 方法一:直接法
      names = ['小孩', '老虎', '枪','胡萝卜','大棒']
      for i in names:
      循环体
    • 方法二:利用下标获取
  • 将列表1中开始下标到结束下标选中的所有元素替换成列表2中所有的元素
    nums = [10,20,30,40,50]
    nums[1:3] = [100,200,300]
    print(nums)

列表与元组的操作:查找和计算

查找

  • in / not in操作:判断某个元素是否存在于列表/元组中
  • index操作:指定的数据在列表/元组的哪个位置
    • 如果元素不错在会报错

    • 如果元素有多个,只返回最前面的哪一个的标准

    • 列表.index(元素,开始下标,结束下标) 在范围内查找元素下标

      alist.index(12,2,5)
      alist.index(12,2) # 取到最后一个元素

  • count操作:指定的数据在列表/元组中出现过几次

计算

  • sum函数:将列表中所有的数值元素累加
    nums = [10,20,30,40,50]
    sum(nums)

  • min/max函数:返回列表中最小/最大的数据元素

你可能感兴趣的:(容器类型:列表和元组)