day 06-1 数据类型(列表)

day 06 列表

常见的数据类型

  • int, 整数类型(整型)
  • bool, 布尔类型
  • str, 字符串类型
  • list, 列表类型:用于储存一些数据的容器(有序&可修改),动态的容器
  • tuple, 元组类型:用于储存一些数据的容器(有序&不可修改),固定的容器
  • dict, 字典类型
  • set ,几何类型
  • float, 浮点类型(浮点型)

1 列表

列表(list),是一个有序可变的容器,在里面可以存放多个不同类型的元素。

1.1 定义

content_list = ["今天","昨天","明天"] # 可以是多个字符串
number_list = [99,77,66,55] # 可以是多个整型
data_list = [1,True,False,"今天"] # 可以是多种类型

user_list = []
user_list.append("今天")
user_list.append(123)
user_list.append(True)
print (user_list) # ['今天', 123, True]

不可变类型:字符串,整型,布尔类型(已经是最小,无法修改)

可变类型:列表(内部数据元素可以修改)

1.2 独有功能

python中为所有的列表类型的数据提供了一批独有的功能

在开始学习列表的独有功能之前,先来做一个字符串和列表的对比

  • 字符串,不可变,即:创建好以后内部无法修改(独有功能都是创建一份新的数据)
name = "linzai"
data = name.upper()
print(name) # linzai
print(data) # LINZAI
  • 列表,可变,即:创建好以后内部元素可以修改(独有功能基本上都是直接操作列表内部,不会创建一份新的数据)
user_list = ["today", "yesterday"]
user_list.append("tomorrow") # list.append() 方法一次只能添加一个元素到列表的末尾
print(user_list)  # ['today', 'yesterday', 'tomorrow']

列表中独有功能如下;

1.追加(.append),在远列表中尾部追加值

data_list = []
v1 = input("请输入您的名字:") # lll
data_list.append(v1)

v2 = input("请输入您的名字:") # kk
data_list.append(v2)

print(data_list) # ['lll', 'kk']
# 案例1
user_list = []
while True :
    user = input("请输入您的名字:")
    if user == "Q":
        break
    user_list.append(user)
print (user_list)
# 案例2
welcome = "欢迎使用linzai游戏".center(30, "*")
print(welcome)

user_count = 0
while True:
    count = input("请输入参加人数:")
    if count.isdecimal():  # 判断是否是数字
        user_count = int(count) # 转换成整型
        break
    else:
        print("输入格式错误,请输入数字")

messages = "{}人参加游戏".format(user_count)
print(messages)

user_name_list = []
for i in range(1, user_count + 1):
    tip = "请输入玩家姓名({}/{}):".format(i, user_count)
    name = input(tip)
    user_name_list.append(name)
print(user_name_list)

2.批量追加(.extend),在一个列表中的元素逐一添加另外一个列表

tool = ["今天","明天","昨天"]
tool.extend(['today', 'yesterday', 'tomorrow']) # .extend() 方法的作用是将传入的可迭代对象中的所有元素逐一添加到现有列表中,扩充列表内容,而不是像 .append() 方法那样只添加单个元素
print (tool) # ['今天', '明天', '昨天', 'today', 'yesterday', 'tomorrow']

tools = ["今天","明天","昨天"]
weapon = ['today', 'yesterday', 'tomorrow'] 
tools.extend(weapon) #将weapons的内容加到tools,改变的是tools,weapons并没有改变
print (tools) # ['今天', '明天', '昨天', 'today', 'yesterday', 'tomorrow']

tools = ["今天","明天","昨天"]
weapon = ['today', 'yesterday', 'tomorrow']
weapon.extend(tools) 
print (tools) # ['今天', '明天', '昨天']
print (weapon) # ['today', 'yesterday', 'tomorrow', '今天', '明天', '昨天']
# 等价于(扩展)
weapon = ['today', 'yesterday', 'tomorrow']
for item in weapon:
    print (item)
# today
# yesterday
# tomorrow


tools = ["今天", "明天", "昨天"]
weapon = ['today', 'yesterday', 'tomorrow']
for item in weapon:
    tools.append(item)
print(tools)  # ['今天', '明天', '昨天', 'today', 'yesterday', 'tomorrow']

3.插入(insert),在原列别的指定索引位置插入值

user_list = ["昨天","今天","明天"]
user_list.insert(0,"yesterday") # .insert() 是列表的一个方法,用于在列表的特定位置插入新的元素
user_list.insert(2,"today") # # 参数 2 指定了插入的位置,即在索引为 2 的位置前插入元素(在 Python 中,索引是从 0 开始计数的,因此索引 2 实际上是指第三个位置)。 "today" 是要插入列表的新元素,它是一个字符串。
print (user_list) # ['yesterday', '昨天', 'today', '今天', '明天']


# 案例
name_list = []
while True:
    name = input("请输入您的姓名(q/Q退出):")
    if name.upper() == "Q":
        break
    elif name.startswith("张"):
        name_list.insert(0, name)
    else:
        name_list.append(name)
print(name_list)

注意:

索引过大:如果插入的索引大于列表当前的最大索引(即列表长度减一),那么新元素将会被添加到列表的末尾。例如,如果列表长度为5,你尝试在索引6的位置插入元素,实际上该元素会被插入到索引5的位置,成为列表的最后一个元素。

索引过小:如果插入的索引小于0,大多数编程语言(包括Python)会将其视为有效索引,并将新元素插入到列表的开头,即索引0的位置之前。在Python中,这相当于使用负索引,其中 -1 表示列表的最后一个元素,-2 表示倒数第二个元素,依此类推。但直接插入负数索引并不是常规做法,通常我们会直接用 insert(0, item) 来在列表开头插入元素。

  1. 在原列表中根据值删除(从左到右找到第一个删除),【慎用,里面没有就会报错】
user_list = ["刘备","关羽","张飞","关羽"]
user_list.remove("关羽") # 只会删除列表中第一个遇到的与 "关羽" 相匹配的元素
print (user_list) # ['刘备', '张飞', '关羽']

# 如果想做的判断里不报错,做if判断
user_list = ["刘备","关羽","张飞","关羽"]
if "赵云" in user_list:
    user_list.remove("赵云") # ['刘备', '关羽', '张飞', '关羽']
print (user_list) # ['刘备', '张飞', '关羽']

# remove只能删除第一个,如果想全部删除,做一个循环
user_list = ["刘备","关羽","张飞","关羽"]
while True :
    if "关羽" in user_list:
        user_list.remove("关羽")
    else :
        break
print (user_list) # ['刘备', '张飞']
# 案例 自动抽奖程序
import random

data_list = ["特等奖", "一等奖", "二等奖", "二等奖", "三等奖", "三等奖", "三等奖"]

while data_list:
    name = input("自动抽奖环节,请输入您的姓名:")
    value = random.choice(data_list) # 随机从data_list抽取一个值出来
    print("恭喜{},获得{}".format(name,value))
    data_list.remove(value)

5.在原列表中根据索引踢出某个元素(根据索引位置删除)

user_list = ["张译","冯绍峰","赵又廷","林更新","刘烨","陈道明","黄轩","秦昊","黄晓明"]

user_list.pop(1) # 从列表中移除位于指定索引位置的元素
print (user_list) # ['张译', '赵又廷', '林更新', '刘烨', '陈道明', '黄轩', '秦昊', '黄晓明']

user_list.pop() # 如果括号中什么都没有标注,移除并返回 user_list 中的最后一个元素
print (user_list) # ['张译', '赵又廷', '林更新', '刘烨', '陈道明', '黄轩', '秦昊']

content = user_list.pop(1)
print (content) # 赵又廷
print (user_list) # ['张译', '林更新', '刘烨', '陈道明', '黄轩', '秦昊']
user_queue = []

while True:
    name = input("请输入购买火车票人的姓名(Q退出):") # "张译","冯绍峰","赵又廷","林更新","刘烨","陈道明"
    if name == "Q":
        break
    user_queue.append(name)

ticker_count = 3
for i in range(ticker_count):
    username = user_queue.pop(0)
    message = "恭喜{},购买火车票成功".format(username)
    print(message)

faild_user = "、".join(user_queue)
faild_message = "非常抱歉,以下几位用用户请选择其他出行方式,名单:{}".format(faild_user)
print(faild_message)
# 恭喜张译,购买火车票成功
# 恭喜冯绍峰,购买火车票成功
# 恭喜赵又廷,购买火车票成功
# 非常抱歉,以下几位用用户请选择其他出行方式,名单:林更新、林更刘烨、刘烨、陈道明

6.清空原列表

user_name = ["张译","冯绍峰","赵又廷","林更新","刘烨","陈道明"]
user_name.clear() # clear() 方法会移除列表中所有的元素,使得列表变为空
print (user_name) # []

7.根据值获取索引(慎用,找不到报错)

user_name = ["张译","冯绍峰","赵又廷","林更新","刘烨","陈道明"]
name = user_name.index("赵又廷")  # .index它的作用是查找列表中指定元素的索引位置。
print (name) # 2

# 为了避免报错,可以先进行判断,是否在列表中
user_name = ["张译","冯绍峰","赵又廷","林更新","刘烨","陈道明"]
if "赵又廷" in user_name:
    name = user_name.index("赵又廷")  # .index它的作用是查找列表中指定元素的索引位置。
    print (name) # 2
else :
    print ("不存在该名字")

8.列表元素排序

# 数字排序
number = [11, 22, 33, 5, 6, 24, 8, 99]
print(number) # [11, 22, 33, 5, 6, 24, 8, 99]

number.sort() # 从小到大排序
print(number) # [5, 6, 8, 11, 22, 24, 33, 99]

number.sort(reverse=True) # 从大到小排序
print(number) # [99, 33, 24, 22, 11, 8, 6, 5]
# 字符串排序
user_name = ["张译","冯绍峰","赵又廷","林更新","刘烨","1","aa"]
user_name.sort() # 字符串排序,每个字符串默认转化成Unicode编码然后进行排序
print (user_name) # ['1', 'aa', '冯绍峰', '刘烨', '张译', '林更新', '赵又廷']

注意:排序时内部元素无法进行比较时,程序会报错(尽量数据类型统一)。

9.原列表的反转

user_name = ["张译","冯绍峰","赵又廷","林更新","刘烨","1","aa"]
user_name.reverse()  # .reverse()表示列表的反转
print (user_name) # ['aa', '1', '刘烨', '林更新', '赵又廷', '冯绍峰', '张译']
posted @ 2024-03-13 15:04  琳仔的后花园  阅读(59)  评论(0)    收藏  举报