python学习——Day05

一、列表相关方法

一、sum、max、min、count
numlist = [12,13,14,15,16,90]

    1. sum
      计算数字列表中所有元素的和
      输出结果为: 160
print(sum(numlist))
    1. max
      求数字列表中最大值
      输出结果为:90
print(max(numlist))
    1. max
      求数字列表中最小值
      输出结果为:12
print(min(numlist))
    1. count
      统计某个元素出现的次数
      输出结果为: 1
print(numlist.count(12))

二、sort、sorted、reverse
numlist1 = [10,30,0,100,5,-100]

    1. sort
      默认将列表从小到大排序,直接修改列表本身,sort返回值为空值
      输出结果依次为: None ;sort [-100, 0, 5, 10, 30, 100]
print(numlist1.sort())
print('sort',numlist1)
    1. sorted
      默认将列表从小到大排序,sorted不修改列表本身,返回排序好的列表本身
      输出结果依次为: sorted [-100, 0, 5, 10, 30, 100] ; sorted [10, 30, 0, 100, 5, -100]
print('sorted',sorted(numlist1))
print('sorted',numlist1)
    1. reverse
      将列表倒序输出
      输出结果为: reverse None ; reverse [-100, 5, 100, 0, 30, 10]
print('reverse',numlist1.reverse())
print('reverse',numlist1)

​ 切片将列表倒序
​ 输出结果为: [-100, 5, 100, 0, 30, 10]

print(numlist1[::-1])

三、index

list1 = ['abcd',1,2,3,4,1]
查找某个元素出现的位置,从左向右找,找到此元素第一次出现的位置后直接停止查找

  • 查找第一个1的位置,以及第二个1的位置
    输出结果为: 1 ; 5
    从list1中出现第一个1的位置后以为开始找1,可以写成list1.index(1,list1.index(1) + 1,6)
print(list1.index(1))
print(list1.index(1,list1.index(1) + 1))
  • 从list1中查找第二个1出现的位置: (方法二)
numIndex = list1.index(1)   #找出第一个1所在位置
list2 = list1[numIndex + 1:]   #将list1中1后边的元素给list2,list2 = [2,3,4,1]
print(list2.index(1) + len(list1[:numIndex + 1]))   #第一个1的下标加上在list2中1的下标+1就是第二个1的下标1+3+1=5

四、综合案例:

  1. 获取列表中出现次数最多的元素。
    例如: nums = [1, 2, 3,1,4,2,1,3,7,3,3],打印[3];nums = [1,2,2,1,3],打印[1,2]
nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3]
# nums = [1, 2, 2, 1, 3]
# numCount判断次数
numCount = 0
# list1存放出现次数最大的元素
list1 = []
# 对所有元素遍历
for i in nums:
    # 判断此元素的最大次数是不是大于原来的最大次数
    # if分支判断列表中单一元素出现次数最大
    if nums.count(i) > numCount:
        # 条件成立重新给numCount赋值
        numCount = nums.count(i)
        # 清空列表再添加元素
        list1.clear()   #条件成立清空上次满足条件写入list1中的i
        list1.append(i)
    # elif分支判断多个元素同时出现次数最大
    elif nums.count(i) == numCount:   # 对于存在多个相同最大次数的元素
        # 将所有情况考虑完在判断本元素是否添加过
        for x in list1:   # 让x为list1中存在的元素
            if i == x:   #如果i在list1中存在了就结束,不再执行。再次遍历新的i进行如上操作
                break
        else:
            list1.append(i)   # x不在list1中存在,在list1中加入i。然后在进行如上操作
print(list1)

二、列表的补充

一、成员运算

判断某个元素在不在容器中,成员运算有: in 、not in

  • 判断 1 在list1中;判断[3]不在list1中
    输出结果为: True ;True
  list1 = [1, 2, 3, 'abc', [1, 2, 3]]
  print(1 in list1)
  print([3] not in list1)

学习了上边成员运算后上边一-四-1的那道案例题,又有了新的写法 (对于有相同最大次数的元素)

  • 获取列表中出现次数最多的元素:
nums = [1, 2, 2, 1, 3]
numCount = 0
list1 = []
for i in nums:
    if nums.count(i) > numCount:
        numCount = nums.count(i)
        list1.clear()
        list1.append(i)
    elif nums.count(i) == numCount and i not in list1:   
         # 出现次数相同,并且不在list1中的i,将其添加到list1中
        list1.append(i)
print(list1)

二、列表的大小比较

有序列表比较大小的要求

  • 两个容器数据类型保持一致
  • 比较的是第一对不相同元素的大小,并且这两个元素的数据类型要一致
  • 两个有序容器找不到第一对不相同元素,谁长谁大

案例:

  1. 下列输出结果为: False
list2 = [1,2,4,[1,2,4]]
list3 = [1,2,4,[1,2,3]]
print(list3 > list2)
  1. 下列输出结果为:Ture ; False ; False
print([3] > [1,2,3]) 
print([123] > [213]) 
print([3] > [3,2,1])

三、如何删除列表中重复元素

通过结合前边所学到列表的知识,删除下边列表中重复的元素 (下边解释说明三种方法)
name_list = ['张三', '李四', '王五', '李四', '王五', '王五', '张三']

  • 错误做法 :
    通常我们最开始会按照下边方式取写 ,输出结果为:
    ​ [‘李四’, ‘李四’, ‘王五’, ‘张三’]
name_list = ['张三', '李四', '王五', '李四', '王五', '王五', '张三']
for i in name_list:
    if name_list.count(i) > 1:
        name_list.remove(i)
print(name_list)

解析:
这是由于在我们第一次循环i 其下标为0,i所对应的元素为 '张三'。在循环一次后name_list = [ '李四', '王五', '李四', '王五', '王五', '张三'],此时再次循环时,i应该循环下标为1的元素'王五',此时下标为0的元素'李四'就没有被循环,导致结果不是我们想要的。

方法一: 间接删除

name_list = ['张三', '李四', '王五', '李四', '王五', '王五', '张三']
names = []
for i in name_list:
    if i not in names:
        names.append(i)
print(names)

解析:
构造一个新列表names,通过if判断,看name_list中取的元素i是否不在names中,不在就在names列表中加入它

方法二: 控制下标

name_list = ['张三', '李四', '王五', '李四', '王五', '王五', '张三']
index_ = 0   
while index_ < len(name_list): # 这个条件是为了让循环结束,不然循环不会跳出来
    if name_list.count(name_list[index_]) > 1:
        del name_list[index_]
    else:
        index_ += 1
print(name_list)

解析:
方法二的想法是从下标为0的元素开始,如果这个元素出现次数>1的话就删除下标为0对应的这个元素,后边依然使用下标为0的元素;当下标为0对应的这个元素出现次数不>1,就让循环的下标数加一,变成0+1,以此类推,得到结果。

方法三: 倒着删除

name_list = ['张三', '李四', '王五', '李四', '王五', '王五', '张三']
for i in range(len(name_list) - 1, -1, -1):
    if name_list.count(name_list[i]) > 1:
        del name_list[i]
print(name_list)

解析:
由于是将下标从后往前的方式取元素,这个题i依次取的数为6,5,4,3,2,1,0.当后边重复的元素被删除之后,前边元素对应下标不改变,每个元素都能进入循环,查看是否重复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值