python学习,匿名函数,装饰器,切片,字符串、列表操作,数据类型-列表的操作

时间:2024-10-29 06:58:24
  • 列表是可变的,这些操作只会影响列表本身,不会生成新的列表

nums=["hello",'bye','good','nice']  
#1.增  
#1.在末尾追加元素  
nums.append('world')  
print(nums)#['hello','bye','good','nice','world']  

#1.2在指定索引位置添加元素  
#insert 注意:原来的元素向后移动  
nums.insert(0,'zoom')  
print(nums)#['zoom','hello','bye','good','nice','world']

#删除指定位置的元素
del nums[1]
print(nums)
#或者
nums.pop(1)
print(nums)

#2.2刚除最后一个元素
nums.pop()
print(nums)

#2.3别除指定元素
#这个元素如果是重复只会删除找到的第一个
#如果元素不存在报错
nums.remove('bye')
print(nums)

#2.4删除指定元素的所有重复元素
while 'bye' in nums:  
nums.remove('bye')  
print(nums)

#2.5清空列表
nums =['zoom','good','nice','world','bye','beautiful','bye','bye','bye','bye']  
print(nums)  
nums.clear()  #不能这样nums=nums.clear(),这样的话nums为None
print(nums)

注意: 如果要删除所有的重复元素,如果要使用for循环
不能这样写

nums =['zoom','good','nice','world','bye','beautiful','bye','bye','bye','bye']
#使用循环遍历删除元素可不可以
for ele in nums:
    print(ele)
    if ele =='bye':
        nums.remove('bye')
print(nums)

#当检测到第一个bye的时候,remove会将它删除同时会移动后面的元素进行补全
#['zoom','good','nice','world','beautiful','bye','bye','bye','bye']
#但是for循环看到是下标,在他这里原来bye的下标(现在的beautiful)已经被循环了
#所以就跳过了一个元素
结果:
zoom
good
nice
world
bye
bye
bye
['zoom', 'good', 'nice', 'world', 'beautiful', 'bye', 'bye']

Process finished with exit code 0

for和remove组合的错误解释

原因如下图所示,

  • 因为for循环是跟着下标循环的
  • remove删除元素后会自动将后面的元素向前移一位
  • 这就导致了使用这种for会检测不完全

在这里插入图片描述

可以这样,nums[:]相当于一个新的元素和nums一样的序列

nums =['zoom','good','nice','world','bye','beautiful','bye','bye','bye','bye']

for ele in nums[:]:
    print(ele)
    if ele == 'bye':
        nums.remove('bye')

print(nums)


zoom
good
nice
world
bye
beautiful
bye
bye
bye
bye
['zoom', 'good', 'nice', 'world', 'beautiful']

Process finished with exit code 0

拓展

a=[12,31,19,27,12,18,39,12,12,14,12,12]
for ele in a:
    a.remove(12)
print(a)
# 根据上面的情况,当我们遇到一个12的时候就会跳过一个元素,这里12有6个于其他元素相# 同,则刚好跳过6个元素,所以for循环了6次,刚好删除全部删除

# 同理,当被删除元素大于其他元素的时候,12可能就删除不干净
# 同理,但被删除元素小于其他元素的时候,会报错

nums =['zoom','good','nice','world','bye','beautiful','bye','bye','bye','bye']  
nums[1]='hello'  
print(nums)

#4.查
#获取指定元素第一次出现的位置
#index 如果找不到报错
pos=nums.index('bye')
print(pos)#4
#获取指定元素出现的次数
count nums.count('bye')
print(count)#5

拷贝和排序

#5.拷贝列表
#生成一个新的地址存放于原列表相同的数据
copy_list=nums.copy()
print(copy_list)
print(id(copy_1ist),id(nums))#21379899694162137989981320

#6,对列表中的元素进行排序
#默认是升序排序的
nums.sort()
print(nums)#['Good','beautiful','bye','bye','bye','bye','bye','nice','world','zoom']
#降序的话
nums.sort(reverse=True)#在升序的基础上将数据反转

sort传入函数

"""
根据函数功能的结果对列表元素进行排序
函数作用于元素的
类似filter
根据函数的功能对序列中的元素进行筛选
"""
nums =['zoom','good','nice','world','bye','beautiful','bye','bye','bye','bye']
nums.sort(key=len)#根据元素的长度对列表进行升序排序,传入一个函数,这里传的是len函数
print(nums)#['bye','bye','bye','bye','bye','zoom','nice','Good','world','beautiful']

nums.sort(key=len,reverse=True)#降序
print(nums)#['beautiful','world','zoom','nice','Good','bye','bye','bye','bye','bye']

# 按首字母大小进行排序
list_s=['abc','def','jhi']  
list_s[2]=list_s[2].title()  #将序列第第三个元素进行首字母大写
list_s.sort()  
print(list_s)  # 没有按照首字母大小进行排序,['Jhi', 'abc', 'def']
list_s.sort(key=lambda s:s.title())  
print(list_s) # 按照首字母大小进行排序, ['abc', 'def', 'Jhi']

反转列表和获取最大、最小元素

#7.反转列表
nums.reverse()
print(nums)
#['bye','bye','bye','bye','bye','Good','nice','zoom','world','beautiful']

#8.获取序列中的最大的元素
max_ele=max(nums)
print(max_ele)#zoom

#9.获取序列中的最小的元素
min_ele=min(nums)
print(min_ele)