列表是有序且可变的容器,元组是有序且不可变的容器
- 列表 有序 可变
- 元组 有序 不可变
列表
- 有序且可变的容器
- 容器内可放多个不同类型元素
定义
有序且可变
user_list = [] user_list.append('铁锤') user_list.append(123)
- 列表内不可变类型:字符串,布尔,整形
- 列表内可变类型: 列表
独有功能
追加
user_list = [] user_list.append()
案例一
append是-单独追加
***********欢迎使用NB游戏*********** 请输入你的游玩人数: 5 5 人参加游戏 (1/5):a (2/5):c (3/5):f (4/5):g (5/5):r ['a', 'c', 'f', 'g', 'r'] welcome = '欢迎使用NB游戏'.center(30,'*') print(welcome) count_person = [] while True: user_count = input('请输入你的游玩人数: ').strip() if not user_count.isdecimal(): print('输入的不是数字!') continue else: break print(user_count,'人参加游戏') for i in range(int(user_count)): user_input = input(f'({i+1}/{user_count}):').strip() count_person.append(user_input) print(count_person)
案例二
extend列表扩展-批量追加-extend
tools = ['板砖','榔头','菜刀'] weapon = ['ak47','m6'] tools.extend(weapon) #tools == ['板砖','榔头','菜刀','ak47','m6'] #extendf可添加字符串 tools.extend('qwert')
案例二-A-批量追加-for
tools = ['板砖','榔头','菜刀'] weapon = ['ak47','m6'] for i in tools: weapon.append(i) print(weapon)
案例三 insert插入
#购买火车票 train_ticket_list = [] while True: user_name = input("Enter your name quit:(q/Q): ").strip() if user_name.upper() == "Q": break if user_name.startswith("吊"): train_ticket_list.insert(0,user_name) else: train_ticket_list.append(user_name) print(train_ticket_list)
如果索引值大于或者小于全部值,则会排列表的最前or最后,不会报错!
案例四 remove删除 慎用
#需要判断是否存在于列表,否则报错 award_queue = ['a','b','c','d'] if 'a' in award_queue: award.remove('a') #列表全部抽奖 import random award_queue = ['a','b','c','d'] while award_queue: user_name = input('请输入姓名: ').strip value = random.choice(award_queue) print('恭喜{0},取得{1}'.format('user_name','value')) award_queue.remove(value)
案例五 pop删除
#买火车票 user_queue_for_train = [] while True: name = input("Enter your name quit:(q/Q): ").strip() if name.upper() == 'Q': break user_queue_for_train.append(name) #火车票分配 train_ticket = 3 for i in range(train_ticket): take_out_name = user_queue_for_train.pop(0) print(f'恭喜{take_out_name}取得车票') #通告剩下未取得车票 no_take_out_name = ','.join(user_queue_for_train) print(f'{no_take_out_name}未取得车票,请重新选择交通工具')
- 案例六 clear清空
案例七 index根据变量查找值 慎用
#如果值不存在于列表,则报错 user_list = ['王宝强','陈羽凡','alex','贾乃亮','Alex'] #判断是否存在 if 'alex' in user_list: name_adddrss = user_list.index('alex') print(name_address) else: print('值不存在')
案例七 sort排序
从小到大,作用于自身,整形
reverse=true反转
a1 = [77,88,99,1,4,9,7] a1.sort() print(a1) a1 = [77,88,99,1,4,9,7] a1.sort(reverse=True) print(a1)
字符串 ord后比较,常见hex表示
a1_name = ['王宝强','Ab陈羽凡','Alex','eric'] a1_name.sort() print(a1_name) #原理来自unicode编码后逐个比较大小 print(hex(ord('王'))) #0x738b print(hex(ord('A'))) #0x41 #Alex比王宝强小,所以在前面 #可以通过for循环比较 per_unicode_list = [] for i in a1_name: a1 = [] for j in i: a1.append(hex(ord(j))) per_unicode_list.append(a1) print(per_unicode_list) #[['0x738b', '0x5b9d', '0x5f3a'], ['0x41', '0x62', '0x9648', '0x7fbd', '0x51e1'], ['0x41', '0x6c', '0x65', '0x78'], ['0x65', '0x72', '0x69', '0x63']]
整形与字符串无法比较,会报错
整形与bool可比较
a2 = [True,False,46,73] a2.sort() print(a2) #[False, True, 46, 73]
案例八 reverse倒叙 非排序 不常用
a1 = [77,88,99,1,4,9,7] a1.reverse() print(a1) #[7, 9, 4, 1, 99, 88, 77]
- count 查询列表存在值由多少个
公共功能
- 相加
- 相乘
in
效率较低,推荐集合,字典
#remove forbidden = ['aa','bb','cc','dd'] if 'aa' in forbidden: forbidden.remove('aa') print(forbidden) #pop forbidden = ['aa','bb','cc','dd'] if 'aa' in forbidden: index = forbidden.index('aa') forbidden.pop(index) else: print('不存在') forbidden = ['aa','bb','cc','dd'] user_text = input('enter word: ').strip for i in a: user_text = user_text.replace(i,'**') print(user_text)
- len 获取长度
索引 [ ] 单一元素
#读 #改 #删 del a[0]
切片 多个元素
#查 a = ['aa','bb','cc','dd'] a[0:2] #['aa','bb'] #改 a[0:2] = [11,22,33,44] #[11,22,33,44,'cc','dd'] a[-10000,1] = #[11,22,33,44,'bb','cc','dd']
超过列表最大不报错,默认最前 最后
可用切片 批量删除
del a[0:2] #['cc','dd']
切片不作用自身,作用新值
步长
a = ['aa','bb','cc','dd','ee'] a = a[0:2:1] a = a[1::] a = a[0:5:2] a = a[5:1:-1]
for循环
正常循环 range循环
a1 = [77,88,99,1,4,9,7,77] for i in a1: print(i)
不能边循环,边删除 ,除非倒叙,或者放列表,统一删除
a = ['刘德华','范德彪','刘华强','刘尼古拉斯赵四','宋小宝','刘能'] for i in range(len(a)-1,-1,-1): if a[i].startswith('刘'): a.pop(i) print(a)
转换
- int,bool无法转列表
str转列表
a = 'alex' data = list[a]
元组转列表
因为元组是不可修改容器
a = (1,2,3,4) data = list(a)
集合转列表
a = {1,2,3,4} data = list(a)
嵌套
data = ['aa',['kk','oo'],True,[11,22,[999,123],33,44],'jkl']
#查询
....
#追加
data.append(666) # ['aa',['kk','oo'],True,[11,22,[999,123],33,44],'jkl',666]
#删除 作用于本身
del data[-2] #['aa',['kk','oo'],True,[11,22,[999,123],33,44],666]
#嵌套修改一
data[-2][1] = 'alex'
['aa',['kk','oo'],True,[11,'alex',[999,123],33,44],666]
#嵌套修改二
data[1][0:2] = [999,666]
#['aa',[999,666,'oo'],True,[11,'alex',[999,123],33,44],666]
补充
可分别赋值
v1,v2 = [1,2]
data = '1|2'
v1,v2 = data.split('|')
列表练习
1.
li = ['alex','wusir','ritian','barry','武沛齐']
#长度
print(len(li))
#追加
li.append('seven')
print(li)
# 1索引插入‘tony’
li.insert(1,'tony')
print(li)
# 2索引插入'Kelly'
li.insert(2,'Kelly')
print(li)
#列表2改‘妖怪’
li[2]='妖怪'
print(li)
#data = [1,'a',3,4,'heart']追加li
data = [1,'a',3,4,'heart']
# li.extend(data)
# print(li)
for i in data:
li.append(i)
print(li)
2.
# s = 'qwert' 追加li
s = 'qwert'
li.extend(s)
print(li)
删除'barry'
li.remove('barry')
print(li)
#删除第二个元素
li.pop(1)
print(li)
#删除2:4
del li[2:5]
print(li)
li = [1,3,2,'a',4,'b',5,'c']
print(li[0:3])
print(li[3:6])
print(li[::2])
print(li[1:7:2])
print(li[1::2])
print(li[-1])
print(li[-1::])
print(li[7::])
print(li[5:0:-2])
3
lis = [2,3,'k',['qwe',20,['k1',['tt',3,'1']],89],'ab','adv']
lis[2] = lis[2].upper()
print(lis)
#将列表数字3改100
lis[1] = 100
lis[3][2][1][1] = 100
print(lis)
#tt改101
lis[3][2][1][0] = 100
print(lis)
#qwe插入火车头
lis[3].insert(0,'火车头')
print(lis)
4. 循环列表
users = ['武沛齐','景女神','肖大侠']
i = 0
while i<len(users):
print(i,users[i])
i+=1
for i in range(0,len(users)):
print(i+1,users[i])
count_num = 1
for i in users:
print(i, count_num)
count_num += 1
5.
Goods = ['汽车','飞机','火箭']
#展示
for i in range(0,len(Goods)):
print(i,Goods[i])
输入
while True:
user_choice = input('请输入你选择工具的序号: ').strip()
if user_choice.isdecimal() and int(user_choice) in list(range(len(Goods))):
break
else:
print('请重新输入')
print(f'你输入的是{user_choice},你选择的是{Goods[int(user_choice)]}')
6.找出50以内能被3整除放入列表
can_division_num =[]
for i in range(51):
if i == 0:
continue
if i%3 == 0:
can_division_num.append(i)
print(can_division_num)
7. 插入列表第0个值
can_division_num =[]
for i in range(51):
if i%3 == 0:
can_division_num.insert(0,i)
print(can_division_num)
8.列表去空格,符合条件加新列表
li = ['alexc','AbC ','egon',' riTiAn','Wusir',' aqc']
new_list =[]
#去掉空格
for i in range(0,len(li)):
li[i] = li[i].strip()
if li[i].startswith('a'):
new_list.append(li[i])
print(li)
print(new_list)
new_list =[]
#去掉空格
for i in range(0,len(li)):
li[i] = li[i].strip()
if not li[i].startswith('a'):
continue
new_list.append(li[i])
print(new_list)
#9. 找车票京
data =['京1231','晋17719','陕15588','琼47715','京556677']
jing_car_code = []
for i in range(0,len(data)):
if not data[i].startswith('京'):
continue
jing_car_code.append(data[i])
print(jing_car_code,len(jing_car_code))
元组
定义
有序 不可变
v1 = (1,2,3,[1,2,3])
书写方式
v1 = (1) #整形 v1 = 1 #整形 #在单个元素时,放入逗号 v1 = (1,)
独有功能
无
公共功能
元组相加,相乘,生成新变量
v1 = ('刘能','赵四') v2 = ('赵本山','尼古拉斯赵四') data = v1*2
- 索引
- 切片
步长
#字符串与反转只能步长反转 user_list = v1[::-1]
索引切片步长,适用于新数据,不作用旧数据
- for循环
转换
str/list 可被转换
name = '武沛齐' data = tuple(data)
嵌套
li = ['alex',[11,22,(88,99,100,),33],'wusir',(ritian,barry),'wenzhou']
#wusir修改wupeiqi
li[2] ='wupeiqi'
#('ritian','barry')修改 ['ritian'ridi']
li[3] = ['ritian'ridi']
#wenzhou删除
li.remove('wenzhou')
li.pop(-1)
del li[-1]
#索引0添加'zhouzhou'
li.ibnsert(0,'zhouzhou')
元组中的具有可被修改的元素比如列表,列表内部可被修改
>>> a = ('a','b',[0,1,2,3,4,('aa','bb')])
>>> a[2].append(66)
>>> a
('a', 'b', [0, 1, 2, 3, 4, ('aa', 'bb'), 66])
元组练习
登录验证可用标志位
# 用户名元组加入列表
#用户添加
user_list = []
while True:
user = input('Enter Your name : ').strip()
if user.upper() == 'Q':
break
pwd = input('Enter Your password : ').strip()
data = (user, pwd)
user_list.append(data)
# user_list = [('aa', 'bb'), ('cc', 'dd'), ('ee', 'ff')]
# 用户登录
login_verify = False
user_login = input('Enter Your Login : ').strip()
user_password = input('Enter Your Password : ').strip()
for i in user_list:
if i[0] == user_login and i[1] == user_password:
login_verify = True
break
if login_verify:
print('Login Successful')
else:
print('Login Failed')
#字符串切割为列表,转元组
text = 'wupeiqi|eric|alex'
data = text.split('|')
data = tuple(data)
print(data)
#生成扑克牌
color_list = ['红桃','黑桃','方块','梅花']
result = []
for i in color_list:
for j in range(1,14):
data = (i,j)
result.append(data)
print(result)