python列表/元组/字典/集合
单词表3
ascending 上升的
ascending order 上升序列
descending 下降的
sort 排序
reverse 反转,颠倒
discard 移除
intersection 交叉
union 联合
symmetric 对称
list列表 [ ] | 类似其他语言的数组,可变(各种组合) | list.append(‘末尾追加’),extend(‘末尾追加拆分一个个添加’),insert(2,‘在第一和二中间插入’),max,min,sorted(排序,默认升序,reverse = True) |
---|---|---|
tuple元组() | 类似列表,元素内容不可修改,只读属性 | (1)的class是int,而不是tuple,所以一个元素的话必须加逗号,不能修改等操作,只能查,可以用下标查询,切片 |
dictionary{} | 以key:value形式,一个个成对的元素 | dict()强制转换,dict[key]=value,如有同名key,是修改,如没有是增加,key在字典中是唯一的 |
set集合 | 关键字,无序的不重复的元素 | 不重复特点,只能用set()创建空集合 |
- list for循环查找某字符串,还有delete的del语法
names = ['zhangsanf','dsdfixne','df ','df ','xinjie','dfllllsdf']
for name in names:
if name == 'xinjie':
print('find it ')
break
else:
print(name)
names = ['xinjie1','xinjie2','xinjie3','xinjie4','xinjie5','xinjie10']
leng=len(names)
i = 0
while i <leng:
if 'xinjie2' in names[i] or 'xinjie1' in names[i]:
del names[i]
leng -=1 # ['xinjie2', 'xinjie3', 'xinjie4', 'xinjie5']
#i -=1 #['xinjie3', 'xinjie4', 'xinjie5']
#continue 也可用这个忽略下方的+1操作
# 如果想精确匹配,用==,其他用in,in是包含关系
i+=1
print(names)
- 字符串存在切片操作[3:9]等
- 列表也支持切片操作:
-正向切片:也能带步长[::2]
-反向切片:[-1::-2]也能成功
list_love = []
while True:
name = input('输入你心爱的名字:')
if name =='quit':
break
list_love.append(name)
print(list_love)
you_love=['java','python']
list_love.extend(you_love) # 列表合并,也可以用+符号合并
num = [1,9,10,23,44,123,902,333,21,45,69,944,100,12]
for i in range(len(num)):
for j in range(i+1,len(num)):
if num[i]>num[j]:
num[i],num[j]=num[j],num[i]
else:
pass
print(num)
- 列表中的元素可以有列表/整型等.
result = [3,2] in [1,2,[3,2,1],4] #False
len[1,2,[3,2,1],4] # 4
#从range列表中取出多个单值,用list合并成一个列表
print(list(range(1,100,3)))
# 如果把字符串用list会拆分成一个单字符的列表,
# 整型不是迭代(能用for in循环的内容,就是可迭代的)
列表list参考https://www.runoob.com/python3/python3-list.html
字符串函数 | 列表函数 |
---|---|
split,strip()等 | append(),extend(),insert(),del,remove(),pop(),clear() |
列表自身函数 | 特点 |
---|---|
append | 加在列表的末尾 |
extend() | 等同于+,拼接两个列表 |
insert() | 插入元素,(参数,元素),把元素插入在参数位前 |
del | del.列表 |
remove | (‘元素’),移除第一个出现的元素,未找到返回异常,找到返回None |
pop() | 不传参数也可以,删除最后一个元素,栈的先进后出法,也可以指定index(下标)去删除,返回值为删除的元素 |
clear() | 清空列表 |
reverse() | 翻转会改列表顺序 |
sort() | 排序,默认为升序,系统函数sorted(list)和自身list.sort(reverse=True,False) |
count() | 统计次数 |
队列:FIFO先进先出
栈:FILO先进后出
# sort跟sorted
a =[1,2,7,9,5,[3,2,1],4]
a.pop(5)
a2 = sorted(a,reverse=True)
a.sort(reverse=False)
print(a)
print(a2)
# [1, 2, 4, 5, 7, 9]
# [9, 7, 5, 4, 2, 1]
王者荣耀文字游戏
https://www.bilibili.com/video/av69060979/?p=69
print('*'*88)
print('\t欢迎来到王者荣耀')
print('*'*88)
role = input('请选择游戏人物:(1.鲁班 2.后弈 3.李白 4.孙尚香 5.貂蝉 6.诸葛亮)')
coins = 1000
hero_list = ['鲁班','后弈','李白','孙尚香','貂蝉','诸葛亮']
weapon_list = []
print('欢迎{}来到王者荣耀,当前金币是{}'.format(role,coins))
while True:
choice = int(input('请选择:\n1.购买武器\n2.打战\n3.删除武器\n4.查看武器\n5.退出游戏'))
if choice==1:
print('欢迎进到武器库:')
weapons = [['刀',100],['樱花刀',1000],['枪',20000]]
for weapon in weapons:
print(weapon[0],weapon[1],sep=' ')
weaponname = input('请输入要购买的武器名称:')
if weaponname not in weapon_list:
for weapon in weapons:
if weaponname == weapon[0]:
if coins >=weapon[1]:
weapon_list.append(weapon[0])
print('已花费{}购买{}'.format(weapon[1],weapon[0]))
coins -=weapon[1]
break
else:
print('金币不足,请多赚点再来')
break
else:
print('武器名称有误')
elif choice==2:
while 1:
war = int(input('请输入你要打的怪物次数:(按0键退出)'))
if war >=1:
for i in range(1,war+1):
print('击败第{}个怪物,赚取{}个金币'.format((i+1),(i+1))
elif choice==3:
print('你现在的武器有{},还有{}个金币'.format(weapon_list,coins))
sell = input('你要删除什么武器:')
for weapon in weapon_list:
if sell == weapon:
weapon_list.remove(sell)
print('删除成功')
print('你现在的武器有{},还有{}个金币'.format(weapon_list,coins))
else:
break
elif choice==4:
print('你现在的武器有{},还有{}个金币'.format(weapon_list,coins))
elif choice==5:
answer = input('确定要离开王者荣耀游戏吗(yes\\no)')
if answer=='yes':
print('期待下次见面,再见')
break
else:
pass
else:
pass
else:
print('存在错误')
print('**************全军出击*************')
- 列举与系统函数枚举(enumerate)
https://www.runoob.com/python3/python3-func-enumerate.html
list = ['dsfa','23','234']
for value in list:
print(value)
for index,value in enumerate(list):
print(index,value)
#0 dsfa
#1 23
#2 234
元组tuple参考https://www.runoob.com/python3/python3-tuple.html
-----tuple()----
num = [1,9,10,23,44,123,902,333,21,45,69,944,100,12]
for i in range(len(num)):
for j in range(i+1,len(num)):
if num[i]>num[j]:
num[i],num[j]=num[j],num[i]
else:
pass
num2 = tuple(num)
print(num2) #[]转为()
元组自身函数 | 仅为两种 |
---|---|
tuple.count() | 个数 |
tuple.index() | 下标位置 |
拆包 | 装包 |
---|---|
a,b,c = tuple | tuple = a,b,c |
a,b,*c =tuple | tuple = a,b,c(c为一个列表) |
*号,多数据是建[ ],变成单个
*号,单个是拆[ ]成多数据
字典dict参考
https://www.runoob.com/python3/python3-dictionary.html
https://www.liaoxuefeng.com/wiki/1016959663602400/1017104324028448
# 列表可以转为字典,但元素都要成对出现
dic1 = dict((('name','java'),('age',18)))
print(dic1) # {'name': 'java', 'age': 18}
- 案例用户注册功能
print('*'*88)
print('请做注册手续以便登陆')
data =[]
while True:
dict_1 = {}
usrname = input('请输入你的用户名:')
password = input('请输入你的密码:')
re_password = input('请输入你的密码:')
email = input('请输入你的邮箱:')
phone = input('请输入你的手机号:')
if password == re_password:
dict_1['密码']=password
dict_1['用户名']=usrname
dict_1['邮箱']=email
dict_1['手机号']=phone
print('注册成功')
data.append(dict_1)
break
else:
print('两次密码不一致,请重新注册')
print('你的用户名为{},请牢记你的密码,欢迎常来本网'.format(usrname))
列表查元素:根据下标
字典查元素:根据key
dic2 ={'xt':100,'sdf':99,'df':98}
for i in dict2:
print(i) #'xt' 'sdf' 'df'
字典自身的函数 | 用法 |
---|---|
items() | .dict2.items()保存列表中,列表均能遍历 |
values | dict2.values()保存到列表中 |
key() | dict2.key()保存到列表中 |
get() | 按key查找value,内置函数,不会报错,返回None |
dict[key] | 按key查找,如找不到会返回keyError |
del dic[‘key’] | 同列表,删除,如没有会弹KeyError |
dict.pop[‘key’] | 可以删除最后一个key的键值对,返回值为值,pop(key,[,default])---->如果没有这个key值,则返回default的值 |
popitem() | 随机删除字典中键值对(一般从末尾删除元素) |
dict1.update(dict2) | 用dict2去加入原dict1,合并操作{}+{} |
dict.fromkeys(seq) | new_dict=dict.fromkeys(list,10),生成一个以list为key,value为10的字典,如没有10,则用None |
- value条件筛选
dict2 ={'xt':100,'sdf':99,'df':98}
for key,value in dict2.items(): #拆包操作
if value >90:
print(key) # xt\n sdf\n df\n
print(dic2.values()) # dict_values([100, 99, 98])
print(dic2.items()) # dict_items([('xt', 100), ('sdf', 99), ('df', 98)])
print(dic2.keys()) # dict_keys(['xt', 'sdf', 'df'])
print(98 in dic2.values()) # True
- 集合的不重复特点
集合参考https://www.runoob.com/python3/python3-set.html
s = {2,4,5} | #单元素,为集合,键值对是字典 |
---|---|
s2 = set(list) | #快速为列表去重set() |
s2.add(‘添加无序的元素’) | # 没有添加顺序,如是一个列表会视为一个整体添加进去 |
s2.update(t1) | #添加无序的元组的元素 |
remove() | 有会删除,没有会报KeyError |
discard | 类似remove,但不会报错 |
pop() | 随机删除,集合中一般删除第一个元素 |
clear() | 清空 |
(+ *) | 集合不支持 |
---|---|
(-)为差集 | 与.difference(set2)一样 |
&为交集 | 两者的交集,与.intersection(set2)一样 |
竖分线 | 是并集,与union(set2)一样 |
^ | 对称差集,函数为symmetric_difference() |
s1.difference_update(s2),可以简化步骤
=====>s1 = s1.difference(s2)
=====>print(s1)
- type()类型的判断
isinstance(变量,类型关键字)
tuple1 = (9,10,23)
if isinstance(tuple1,tuple) # True
- 可变与不可变