系列文章目录
第六章 Python 机器学习入门之循环语句与列表相关
Python 机器学习入门之列表
前言
今天学习列表的相关和排序冒泡
一、列表的定义和获取元素
List表:
作用:类似于其他语言的数组。数组:数字的组合,字母的组合,字符串的组合…
符合:列表:[ ]
names = ['marry','tom','rose','jack']
computer_brank = []
#地址
print(id(name))
print(id(computer_brank))#无论列表是否为空都会被分配地址
#元素获取使用:下标 索引
print(names[0])
print(names[1])
#获取最后一个元素
print(names(-1))
print(names(len(names)-1))
#获取第一个元素
print(name[-5])
#结合循环
#for i in 'hello'
#print(i)
print('**************')
for name in names:
print(name)
#查询names里面有没有保存rose
for name in names:
if name=='rose':
print('say:yes')
break
else:
print('''say:no''')
二、列表操作更新和删除
#增删改
brands=['shuai','beautiful','momo','miko']
#改
print(brands)
print(brands[-1])
brands[-1]='mikoo'
print(brands)
#momo----->caca
for i in range(len(brands)):
#i是下标:0,1,2,3....
if 'momo'in brands[i]:
brands[i] = 'caca'
print(brands)
#删除 del 是delete的缩写
del brands[2]
print(brands)
#删除 momo,miko
brands=['shuai','beautiful','momo','miko']
l=len(brands)
i=0
while i<l:
if 'momo' in brands[i] or 'miko' in brands[i]:
#此处的in也可以用==,'momo' == brands[i],‘==’比较精确,而in的话,只要包含有momo都能True
del brands[i]
l-=1
else:#这里也可以使用continue
i+=1
print(brands)
二、列表的切片操作
字符串的切片操作
列表的切片操作
list['happy','sad','lovely','beautiful','handsome','worried']
print('list[2:4]')
结果:
'sad'
'lovely'
'beautiful'
'handsome'
和前面字符串的切片一样,可以设计步长。
print('list[2::2]')#步长正方向
结果:
'sad'
'beautiful'
'worried'
想要从后面向前设计步长,可以这样
print('list[-2:-5:-1]')
为什么这样写呢,我们知道-2:'handsome',-5:'sad',要想从-5到-2需要反方向才可以,所以第三个变量给负数,负几就是设计步长。
三、列表添加,删除元素,翻转,计次数
列表是在内存建立的,只能建立临时的小数据库
创建一个空列表
girls = ['小龙女']
while True:
names = input('请输入你心目中的好看的女生:')
if names =='quit':#quit退出,可以退出循环,可以任意设置。
break
#列表的函数使用:append extend insert
#append() 末尾追加,将一个对象追加到list尾部,对象可以是str,list,字典等对象
girls.append(names)
#extend() 将一个序列中的每个元素一次性添加到列表中
girls.extend(names) #此时,如果我输入刘亦菲,会输出'小龙女','刘','亦','菲'
这个时候是不是想到了'+'拼接符合,强大的'+'号,当然也可以实现列表的拼接
girls = girls+girls
#insert() 指定位置插入,后面向后移动一位
#girls['小龙女','刘诗诗','落九川','千雅浙一湖']
# 0 1 2 3
girls.insert(1,'千山鸟飞绝')
#girls['小龙女','千山鸟飞绝','刘诗诗','落九川','千雅浙一湖']
# 0 1 2 3 4
print(girls)
'''
删除:
del list[index]
remove() 删除列表中第一次出现的元素e,返回值是None。如果没有找到要删除的元素则报告异常
pop() 弹栈 移除列表中的最后一个元素,返回值是删除的那个元素,默认删除最后一个,但是也可以指定index(下标)删除
clear()
'''
#remove
lunch_list = ['牛排','寿司','牛肉面','麻辣香锅''自助火锅']
lunch_list.append('麻辣香锅')#后接麻辣香锅
lunch_list.remove('麻辣香锅')#如果找不到,报异常
print(lunch_list)---->把从左往右数的第一次出现的麻辣香锅给删除了。
#pop
lunch_list = ['牛排','寿司','牛肉面','麻辣香锅','自助火锅']
lunch_list.pop()#如果找不到,报异常。返回值是自助香锅
print(lunch_list)#---->删去了自助火锅
这和lun_list.pop(4)是一样的
#clear 清除列表(里面的元素全部删除)
lunch_list = ['牛排','寿司','牛肉面','麻辣香锅','自助火锅']
lunch_list.clear()
print(lunch_list)#-------->[]
'''
翻转:reverse()
'''
lunch_list = ['牛排','寿司','牛肉面','麻辣香锅','自助火锅']
lunch_list.reverse()#----->['自助火锅','麻辣香锅''牛肉面','寿司','牛排']
和print(lunch_list[::-1])不同的是,#[::-1]只是逆序去除列表中的元素打印出来,而reverse是直接改变了位置。
'''
次数:count()
'''
lunch_list = ['牛排','寿司','牛肉面','麻辣香锅','自助火锅','麻辣香锅']
print(lunch_list.count('麻辣香锅'))----->2
四、列表求最大值max,最小值min,求和sum,排序sorted,sort
练习①
#产生10个随机数,保存在列表中
'''
步骤:
1.如何产生随机数
2.10个数字的产生
3.将产生的随机数放到列表中
4.打印列表
'''
import random
random_list=[]#存放随机数
for i in range(10):
ran = random.randint(1,100)
random_list.append(ran)
print(random_list)
'''
产生10个不同的随机数
'''
import random
random_list=[]#存放随机数
for i in range(10):
ran = random.randint(1,100)
if ran not in random_list
random_list.append(ran)
print(random_list)
乍一看,没什么问题,但是输出的时候就能看出问题了。
for循环10次,如果要取10个不同的随机数,只可能是10次都不相同,而如果有一次相同,那么循环就不进入if执行语句,输出就要少一个数字。
'''
所以用while
'''
import random
random_list=[]#存放随机数
i=0
while i<10:
ran = random.randint(1,100)
if ran not in random_list:
random_list.append(ran)
i+=1
print(random_list)
'''
我现在又想找10个随机值中的最大值,最小值,系统内置函数max,min,或者也可以自己写。
'''
max_value = max(random_list)
print(max_value)
min_value = min(random_list)
print(min_value)
print('自己写求最大值')
Max_value = random_list[0]
for i in random_list:#这个我们知道,把random_list的依次值给i
if i>Max_value:
Max_value=i
print(Max_value)
#---------------------------------------
print('自己写求最小值')
Min_value = random_list[0]
for i in random_list:#这个我们知道,把random_list的依次值给i
if i<Min_value:
Min_value=i
print(Min_value)
'''
现在我又想求和运算
'''
total_neizhi=sum(random_list)
print('系统求和',total_neizhi)
total=0
for i in random_list:
total+=i
print('自定义求和',total)
'''
现在我又想排序
'''
'''
>>> help(sorted)
Help on built-in function sorted in module builtins:
sorted(iterable, /, *, key=None, reverse=False) 默认升序reverse=False,reverse=True降序
Return a new list containing all items from the iterable in ascending order.返回一个新的列表,以升序形式
A custom key function can be supplied to customize the sort order, and the reverse flag can be set to request the result in descending order.
'''
#升序
sort_list=sorted(random_list)
print(sort_list)
这个和之前一样,只是升序输出,其本身位置并没有改变
random_list.sort()#但是用sort()的话,会将列表里面的值位置改变
#降序
sort_list=sorted(random_list,reverse=True)
print(sort_list)
random_list.sort(reverse=True)
五、冒泡排序法
相邻两个数值之间比较,顺序对的比较下一位相邻,直到全正确
#x到d排序
list1=[20,13,40,39,29,15,25]
for i in range(len(list1) - 1): # 这个循环负责设置冒泡排序进行的次数0 1 2 3 4 5
for j in range(len(list1) - i - 1): # j为列表下标0~5,0~4,0~3,0~2,0~1,0~0
if list1[j] > list1[j + 1]:
room= list1[j]
list1[j]=list1[j+1]
list1[j+1]=room
print(list1)
#d到x排序
list1=[20,13,40,39,29,15,25]
for i in range(len(list1) - 1): # 这个循环负责设置冒泡排序进行的次数0 1 2 3 4 5
for j in range(len(list1) - i - 1): # j为列表下标0~5,0~4,0~3,0~2,0~1,0~0
if list1[j] < list1[j + 1]:
room= list1[j]
list1[j]=list1[j+1]
list1[j+1]=room
print(list1)
六、列表支持的符号,列表嵌套,类型转换
‘+’拼接
‘*’多个:
list1=[0,1]*2------>list=[0,1,0,1,0,1]
‘in’是否存在,返回布尔类型
#二维:
list1=[2,5,1,23,[3,4],[5,7]]
取出一个列表:
list2=list1[-1]--->[5,7]
取出一个列表中的值
list3=list1[-1][0]----->5
#列表中的元素
'''
整形
字符串类型
浮点型
列表
元组
字典
对象
'''
类型转换:
str()
int()
list()----->将指定内容转换成列表,只要内容是可迭代的都可以。例如字符串,range(1,10)
list(range(1,10,4))----->[1,5,9]