day05-列表和random

day05 列表总结 和 random

列表部分,分为,1.列表的定义,2.列表的下标及切片的引入,3.列表的增删改查,4.好用的 BIF

1. 列表的定义

  • 列表:一个能够储存各种数据的容器

  • 属性:
    a. 什么都能存储的大仓库
    b. 可变的。 (增,删,改)
    c. 有序的。 (下标,索引)

2.列表的下标及切片

下标 :

  1. 列表除了正向坐标,还可以使用负向坐标的(-1开始),并且可以组合使用
  2. 注意列表的下标是从0开始的即可

切片

  1. 定义 :从原来的容器中提取新的容器

  2. 语法 :变量[M : N : step] (注意是变量,不只是列表,其他变量也能用)

  3. 注意 :
    a. 切片同样是一个左闭右开的区间,且如果是负向取数,也是左闭右开
    b. 正向下标可以和负向下标组合使用,如list[0,-1],从开始取到倒数第二个
    c. 步长step,即序号相减。且列表的长度永远是比最后一个索引值大1,也可以为负

3.列表的增删改查

增加元素 :

  • append() : 追加
    list.append(需要插入的元素)

      *append()适用于所有向列表中追加元素的操作,列表推导式在某些情况下可以替代append,且性能方面列表推导式优于append*
    
  • insert() : 插入
    list.insert(插入元素的位置,插入的元素)

  • extend() :将另一个容器黏贴进列表
    list.extend([1,2,3])

  • 列表推导式

修改元素 :通过下标直接修改

列表的运算问题:
1.列表的重复: list1 * 10
2.列表的拼接: list1 + list2
3.成员运算: in、not in
4.比较大小:
# 第一对不相等的元素 ——> 比较 -> 类型一致,比较大小;类型不一致,报错
a. 比较的元素必须是同类型的,(如果第一对是不相等的,就会比较,燃后报错)
b. 比较大小的是第一对不相等的元素的大小(对容器来说的)

eg :list1 = 【1,2,3,4】
list2 = 【1,2,4,5】
list1小于list2,比较第一对不相等的3和4.
c. 数字正常比较大小

删除元素 :

  • clear : 直接将列表清空
    list.clear() # clear()里不传参

  • del : 删除某个元素
    del list[下标]

  • remove() :移除某个元素 (彻底删除,无返回值)
    list.remove(元素的值)

  • pop() : 删除某个元素 (删除后,有返回值)
    list.pop(索引)

  • 区分 :
    1. 输入的什么:
    a. pop()和del都是输入下标(索引)
    b. remove()输入的是元素的值

      2. 返回值问题 :
          a. remove()无返回值
          b. pop() 有返回值
    

查找元素 :

  • index() :从左向右查找,找到第一个符合元素立刻停止,返回下标
    a. eg: 查找
    index1 = num.index(‘a’)

    b. eg:查找第二个‘a’,从第5个开始查找
    index1 = num.index(‘a’,5)

    c. 如果查找元素不存在,直接报错

4.列表推导式

  • 作用:生成一个有元素的列表

  • 语法:

( 只记这两句话)
(只注意:1.表达式会随着for循环遍历输出,后面展开按正常缩进展开就行了。2.其作用就是往列表里添加元素的)
1. **[表达式 for 变量 in 容器]**
    
    a.展开是:for 变量 in 容器 :
                    表达式

    b. for循环每执行一次,for循环就会将其生成的结果添加到列表中。**注意表达式是在for循环体里面的,参与循环的**
    
        num = [i for i in range(1,101)]
        num_2 = [1 for i in range(10)]  # 向列表中添加10次1
  
   
2. **[表达式 for 变量 in 容器 if 条件]**
    a. for循环执行一次,if分支判断一次,条件成立式表达式向列表中添加一次
        list3 = [i for i in range(1,101) if i % 2 ==0]
  
  
3. **[表达式 for 变量 in 容器 for 变量 in 容器]**
    list4 = 【i for _ in range(3) for _ in range(1,11)】

5. 列表内置的BIF

  1. enumerate( ) 方法 :将列表转换成一个可迭代对象,输出列表的中所有的(下标,值)

  2. len()方法:太熟了,不说了

  3. max()与min() :但注意,只能比较同类型数据

  4. count() : 统计某个元素出现的个数

    print(num.count(4)) :统计4这个元素出现的次数
    注意:count()的对象不能是列表,只有在excel这么用?

  5. sum(): 求和

  6. reverse(): 将列表倒序,并且无返回值,直接修改

    a. 作用等同于,num[::-1],但这个有返回值,得赋值
    b. num.reverse() # 直接修改原列表num

  7. list.sort(reverse=False) 与 sorted(列表,reverse=False) :

    a. sort :将列表从小到大排序,无返回值,直接修改原列表
    使用方法:num=[1,2,3,4]
    num.sort(reverse=True)
    print(num)
    b. sorted : 将列表从小到大排序,有返回值,不修改原列表
    使用方法:num=[1,2,3,4]
    sorted(num,reverse=True)
    print(num) #原列表无修改

    d.一般无返回值修改原列表的: 都是“list.方法()”的格式,如list.append()

    有返回值的: 都是函数形式,方法(list,参数=),如sorted(列表,reverse=True)

random模块

——> randint(1 , 4)——>  从【1,4】闭区间中随机获取一个整数

——> randrange(1, 4, 2)——>  约等于randint +range,左闭右开区间

——> random.choice([1,2,3,4]) ——> 从容器中随机获取一个元素

——> random.choices([1,2,3,4],k=2)  ——> 从容器中随机获取k个元素,有放回的抽取元素

——> random.sample([1,2,3,4],k=3 ) ——> 无放回的抽取元素,且注意必须从有序容器抽取

——> random.shuffle(list1)  ——>     将有序容器打乱顺序,并抽取,且无返回值,直接修改原容器

错题总结

一. 删除列表中的重复元素(不使用set())

使用不同的方法,BIF会让思路开阔,题目解法简化
方法一用的是not in ,方法二用的是count(),都没用到索引及列表长度

# 方法一,使用not in,将问题转化成: 将哪些元素加入新列表
# 这个可以成为固定用法,新的空列表+not in => 去重原列表进新列表

names = ['张三', '李四', '大黄', '张三','张三']
names_new = []
for i in names :
    if i not in names_new :
        names_new.append(i)
print(names_new)

# not in 的使用!!
# 方法二、使用count方法

# for循环为何能遍历循环? : for循环会首先给可迭代对象,附上初始迭代索引,然后0,1,2,3。执行完一个后,执行下一个。
    #当你的循环中产生删除时,元素会移动,两个东西会变:角标和元素对应关系,列表长度len,这时候去用【】索引,很可能会out of range

# 方法二不牵扯索引及长度,直接count
names = ['张三', '李四', '大黄', '张三','张三']
for i in names :
    if names.count(i) > 1 :
        names.remove(i)        
print(names)
# 方法三、最简单的方法set()

print(list(set(names)))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值