列表的定义和获取元素
作用:类似其他语言的数组,但他可以存放多种类型的元素,而数组声明什么类型就只能存放什么类型的元素
#声明
names=['Jack','tom','lucy','superman','ironman']
computer_branda=[]
print(id(names))#1780627220488
print(id(computer_branda))#1780627221192
#元素获取使用: 下标 索引
#获取第一个元素
print(names[0])#Jack
print(names[-5])
#获取最后一个元素
print(names[-1])#ironman
print(names[len(names)-1])
结合循环使用列表
#for i in 序列(字符串/列表)
for i in 'hello':
print(i,end=',')#h,e,l,l,o,
print()
names=['Jack','tom','lucy','superman','ironman']
for name in names:
print(name,end=' ')#Jack tom lucy superman ironman
print()
#查询names里面有没有保存超人
for name in names:
if name =='superman':
print("有超人!")
break
else:
print("没有超人")
列表增删改
改
brands=['hp','dell','thinkpad','支持华为','lenovo','mac','神州']
#1.---改 列表是可变的,而字符串是不可变的
print(brands)#['hp', 'dell', 'thinkpad', '支持华为', 'lenovo', 'mac', '神州']
print(brands[-1])#神州
brands[-1]='HASEE'#进行修改
print(brands)#['hp', 'dell', 'thinkpad', '支持华为', 'lenovo', 'mac', 'HASEE']
print('--------------------')
if 'l' in 'lock':
print('l in lock')#l in lock
for brand in brands:#取出列表中其中一个元素赋值给变量brand,此时的brand是一个字符串
if '华为' in brand:
brand='HUAWEI'
print(brands)#['hp', 'dell', 'thinkpad', '支持华为', 'lenovo', 'mac', 'HASEE']
#从上面结果可以知道修改失败,原因是我们修改的对象是brand而不是brands
for i in range(len(brands)):
if '华为' in brands[i]:
brands[i]='HUAWEI'
print(brands)#['hp', 'dell', 'thinkpad', 'HUAWEI', 'lenovo', 'mac', 'HASEE']
#因此我们如果要修改列表要去根据下标修改到数组本身
删
#删除----陷进多多
brands=['hp','dell','thinkpad','支持华为','lenovo','mac','神州']
del brands[2]
print(brands)#['hp', 'dell', '支持华为', 'lenovo', 'mac', '神州']
# for brand in brands:
# if brand=='hp':
# del ?
# for i in range(len(brands)):#在第一次编译后生成0 1 2 3 4 5
# if 'hp' in brands[i] or 'mac' in brands[i]:
# del brands[i]
# print(brands)#报错拉!!!因为他删除hp后 brands只有五个了,[ 'dell', '支持华为', 'lenovo', 'mac', '神州']
# 那么brands[3]删掉'mac'---》[ 'dell', '支持华为', 'lenovo', '神州']
#接下来访问brands[4]就开始报错了,序列0-5是一开始生成的,而后面列表却没那么多个可以访问了
# l=len(brands)
# for i in range(l):
# if 'hp' in brands[i]:
# del brands[i]
# l-=1#没有用,一样报错,你修改了l,但是l是原先就生成的,后面的与他无关了
# print(brands)
l=len(brands)
i=0
while i<l:
if 'hp' in brands[i] or 'mac' in brands[i]:
# print(brands[i])
del brands[i]
l-=1
i+=1#处理第几个元素
print(brands)#['dell', '支持华为', 'lenovo', '神州']存在潜在问题
#过程解析
# i=0-->['dell', '支持华为', 'lenovo', 'mac', '神州'] l=5 i=1
# i=1 直接跳过判断dell了,如果dell也是要删的呢?l=5 i=2
# i=2 l=5 i=3
# i=3-->['dell', '支持华为', 'lenovo','神州'] l=4 i=4 结束,越过神州
#变化
brands=['hp', 'dell', '支持华为', 'lenovo', 'mac', '神州']
l=len(brands)
i=0
while i<l:
if 'hp' in brands[i] or 'mac' in brands[i] or 'dell' in brands[i]:
del brands[i]
l-=1
i+=1
print(brands)#['dell', '支持华为', 'lenovo', '神州']越过了dell没有被移除
#练习(可能存在漏删,因为删完后面的元素会上来,下一个应该检测的其实是当前位置元素了,不应该+1)
words=['hello','goods','gooo','world','digot','alpha']
w=input('请输入一个单词')
i=0
l=len(words)
while i<l:
if w in words[i]:
del words[i]
l-=1
i+=1
print(words)
#请输入一个单词go
# ['hello', 'gooo', 'world', 'alpha']
#变化----不漏删版本
words=['hello','goods','gooo','world','digot','alpha']
w=input('请输入一个单词')
i=0
l=len(words)
while i<l:
if w in words[i]:
del words[i]
l-=1
#保证删除后下一个元素仍是本身即可
# i-=1
continue
i+=1
print(words)
#请输入一个单词go
# ['hello', 'world', 'alpha']
列表切片
#列表切片[start:end:step]
#字符串的切片切完仍是子字符串。列表切片切完仍是一个子列表
s='abcdefg'
print(s[2:5])#cde
list1=['杨超越','热巴','佟丽娅','杨幂','赵丽颖','刘亦菲','黑嘉嘉']
print(list1)
print(list1[3])#杨幂
print(list1[3:6])#['杨幂', '赵丽颖', '刘亦菲']
print(list1[-3:-1])#['赵丽颖', '刘亦菲']
#切片步长
print(list1[::2])#['杨超越', '佟丽娅', '赵丽颖', '黑嘉嘉']
print(list1[-5:-1:2])#['佟丽娅', '赵丽颖']
#反方向---只要步长是负数
print(list1[-1::-1])#['黑嘉嘉', '刘亦菲', '赵丽颖', '杨幂', '佟丽娅', '热巴', '杨超越']
print(list1[-1::-2])#['黑嘉嘉', '赵丽颖', '佟丽娅', '杨超越']
增加
1.append
girls=['杨幂']
#当输入quit表示退出循环
while True:
name=input('请输入你的女神名字')
if name=='quit':
break
girls.append(name)
print(girls)
2.extend()&&insert()
#extend
girls=['杨幂']
names=['大s','小s']
girls.extend(names)
print(girls)#['杨幂', '大s', '小s']
#insert
girls.insert(1,'刘涛')
print(girls)#['杨幂', '刘涛', '大s', '小s']
练习
#产生10个随机数,将其保存到列表中---10个中可能产生相同的
import random
random_list=[]
for i in range(10):#循环10次产生随机数,这种可能导致产生相同的随机数
ran =random.randint(1,20)
random_list.append(ran)
print(random_list)#[11, 6, 13, 18, 18, 16, 1, 14, 5, 9]
#产生10个随机数,将其保存到列表中---不会出现相同,但是可能没有达到10个,因为机会只给10次,有相同就舍弃这次机会
import random
random_list=[]
for i in range(10):
ran =random.randint(1,20)
if ran not in random_list:
random_list.append(ran)
print(random_list)#[3, 11, 4, 9, 7, 5, 6, 12]
#用while实现
import random
random_list=[]
i=1
while i<=10:
ran=random.randint(1,20)
if ran not in random_list:
random_list.append(ran)
i+=1
print(random_list)#[15, 13, 19, 12, 18, 2, 16, 7, 5, 20]
#找出列表的最大值
max_val=max(random_list)
print(max_val)#20
#自定义求最大值
#假设列表中的第一个元素就是最大值
max_val=random_list[0]
for val in random_list:
if val>max_val:
max_val=val
print('最大值:{}'.format(max_val))#最大值:20
#求和
he=sum(random_list)
print('系统求和',he)
sum_1=0
for value in random_list:
sum_1+=value
print(sum_1)
列表排序
#列表排序
#sort() 改变这个列表本身而已
# sorted() 不改变本身,只改变副本
mylist=[6,2,5,99,43,56,22]
new_list=mylist.sort()
print(mylist)#[2, 5, 6, 22, 43, 56, 99]
print(new_list)#None
mylist=[6,2,5,99,43,56,22]
new_list=sorted(mylist)
print(mylist)#[6, 2, 5, 99, 43, 56, 22]
print(new_list)#[2, 5, 6, 22, 43, 56, 99]
new_list=sorted(mylist,reverse=True)
print(new_list)#[99, 56, 43, 22, 6, 5, 2]
列表的常用方法
'''
字符串函数:
'abc'.split('-')
列表函数:
添加:append extend insert
删除:del list[index]
remove(ele) 移除列表中第一个匹配ele的元素,如果找不到则报异常,返回值为none
pop() 移除列表最后一个元素,返回值为移除的元素
pop(index) 移除列表中指定位置的元素,返回值为移除的元素
clear() 清空列表
翻转: reverse() 将列表中的元素翻转,会改变原有列表
'''
x='a-b-c'.split('-')
print(x)#['a', 'b', 'c']字符串切割成列表
hotpot_list=['海底捞','钾補钾補','热辣一号','宽板凳']
hotpot_list.append('张亮麻辣烫')
print(hotpot_list)#['海底捞', '钾補钾補','热辣一号', '宽板凳', '张亮麻辣烫']
del hotpot_list[0]
print(hotpot_list)#['钾補钾補','热辣一号', '宽板凳', '张亮麻辣烫']
result=hotpot_list.remove('钾補钾補')
print(result)#None
print(hotpot_list)#['热辣一号', '宽板凳', '张亮麻辣烫']
result=hotpot_list.pop()
print(result)#张亮麻辣烫
print(hotpot_list)#['热辣一号', '宽板凳']
hotpot_list=['海底捞','钾補钾補','热辣一号','宽板凳']
result=hotpot_list.pop(2)
print(result)#热辣一号
print(hotpot_list)#['海底捞', '钾補钾補', '宽板凳']
result=hotpot_list.clear()
print(result)#None
print(hotpot_list)#[]
#两种逆序比较
hotpot_list=['海底捞','钾補钾補','热辣一号','宽板凳']
#不改原列表
print(hotpot_list[::-1])#['宽板凳', '热辣一号', '钾補钾補', '海底捞']
print(hotpot_list)#['海底捞', '钾補钾補', '热辣一号', '宽板凳']
#改变原列表
print(hotpot_list.reverse())#None
print(hotpot_list)#['宽板凳', '热辣一号', '钾補钾補', '海底捞']
#两种排序
'''
sorted(list)
list.sort()
'''
l=[4,8,1,8,9,5,7]
#改变原列表
print(l.sort(reverse=True))#None
print(l)#[9, 8, 8, 7, 5, 4, 1]
#不改变原列表
l=[4,8,1,8,9,5,7]
print(sorted(l))#[1, 4, 5, 7, 8, 8, 9]
print(l)#[4, 8, 1, 8, 9, 5, 7]
游戏练习
#游戏
print('*'*40)
print('\t欢迎来到王者荣耀')
print('*'*40)
role=input('请选择游戏人物:(鲁班,后裔,李白,孙尚香,貂蝉)')
coins=1000
my_weapon=[]
print('欢迎{0}来到王者荣耀,当前金币是:{1}'.format(role,coins))
while True:
choice = int(input('''
请选择:
1.购买武器
2.打仗
3.删除武器
4.查看武器
5.退出游戏
6.查看当前金币
'''))
if choice==1:
print('欢迎进入武器库:')
weapons=[['屠龙刀',500],['樱花枪',400],['98k枪',1000]]
for weapon in weapons:
print(weapon[0],weapon[1],sep=' ')
weaponname=input('请选择你要购买的武器')
#1.我当前没有这个武器2.这个武器存在武器库中
if weaponname not in my_weapon:
for weapon in weapons:
if weaponname==weapon[0]:
#金币是否足够
if coins>=weapon[1]:
my_weapon.append(weaponname)
coins-=weapon[1]
print('{}购买成功'.format(weaponname))
break
else:
print('金币不够,请快打仗挣金币')
break
else:#能够正常执行到这里,说明武器库没有这个武器
print('输入武器名称错误')
elif choice==2:
pass
elif choice==3:
pass
elif choice==4:
pass
elif choice==5:
answer=input('确定离开王者荣耀?(Y/N)')
if answer=='Y':
break
else:
pass
elif choice==6:
print('当前金币为:',coins)
else:
print('输入错误,请重新选择')