python数据类型与功能二 | 基础五

2025-04-23T16:15:00

列表是有序且可变的容器,元组是有序且不可变的容器

  • 列表 有序 可变
  • 元组 有序 不可变

列表

  • 有序且可变的容器
  • 容器内可放多个不同类型元素

定义

  • 有序且可变

    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)
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »