一、列表相关方法
一、sum、max、min、countnumlist = [12,13,14,15,16,90]
- sum
计算数字列表中所有元素的和
输出结果为: 160
print(sum(numlist))
- max
求数字列表中最大值
输出结果为:90
print(max(numlist))
- max
求数字列表中最小值
输出结果为:12
print(min(numlist))
- count
统计某个元素出现的次数
输出结果为: 1
print(numlist.count(12))
二、sort、sorted、reversenumlist1 = [10,30,0,100,5,-100]
- sort
默认将列表从小到大排序,直接修改列表本身,sort返回值为空值
输出结果依次为: None ;sort [-100, 0, 5, 10, 30, 100]
print(numlist1.sort())
print('sort',numlist1)
- sorted
默认将列表从小到大排序,sorted不修改列表本身,返回排序好的列表本身
输出结果依次为: sorted [-100, 0, 5, 10, 30, 100] ; sorted [10, 30, 0, 100, 5, -100]
print('sorted',sorted(numlist1))
print('sorted',numlist1)
- 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
四、综合案例:
- 获取列表中出现次数最多的元素。
例如: 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)
二、列表的大小比较
有序列表比较大小的要求
- 两个容器数据类型保持一致
- 比较的是第一对不相同元素的大小,并且这两个元素的数据类型要一致
- 两个有序容器找不到第一对不相同元素,谁长谁大
案例:
- 下列输出结果为: False
list2 = [1,2,4,[1,2,4]]
list3 = [1,2,4,[1,2,3]]
print(list3 > list2)
- 下列输出结果为: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.当后边重复的元素被删除之后,前边元素对应下标不改变,每个元素都能进入循环,查看是否重复。