python当中的列表函数、推导式详解

列表是list来表示、列表是一个容器可以装任何数据类型的数据

表达式:list = []

1、定义列表

第一种方法
list1 = ['放牛娃','dcs8','test',111,888,9]
print(list1)                 # ['放牛娃', 'dcs8', 'test', 111, 888, 9]
print(type(list1))           # 数据类型为列表:<class 'list'>
​
第二种方法
test = 'hello放牛娃'
list2 = list(test)
print(list2)                 # ['h', 'e', 'l', 'l', 'o', '放', '牛', '娃']
print(type(list2))           # 数据类型为列表:<class 'list'>

 2、列表当中常用的函数和用法

my_list = ["aa","bb","cc","aa"]
a = len(my_list)          # 统计列表长度
print(a)                  # 4   

b = my_list.count("aa")   # 统计 某个元素出现的个数
print(b)                  # 2

print("aa" in my_list)    # True

2.1、索引赋值

test = 'hello'
list2 = list(test)
list2[0] = 'dcs8'           # 把dcs8这个字符串赋值给到list2这个列表索引为0的地方
print(list2)                # ['dcs8', 'e', 'l', 'l', 'o']
print(type(list2))          # <class 'list'>

2.2、切片赋值

test = 'hello'
list2 = list(test)            # ['h', 'e', 'l', 'l', 'o']
list2[3:] = list('dcs')
print(list2)                  # ['h', 'e', 'l', 'd', 'c', 's']

2.3、append函数 ==》可以在列表的后面添加任意数据类型的数据

list1 = ['test','dcs8',888,99,1]
list1.append('duoceshi')
print(list1)              # ['test', 'dcs8', 888, 99, 1, 'duoceshi']

list1.append(222)
print(list1)              # ['test', 'dcs8', 888, 99, 1, 'duoceshi', 222]

list1.append(["aa","bb"])
print(list1)              # ['test', 'dcs8', 888, 99, 1, 'duoceshi', 222, ['aa', 'bb']]

2.4、extend函数 两个列表拼接

list1 = ['test','dcs8',888,99,1]
list1.extend("xiaoming")
print(list1)                 # ['test', 'dcs8', 888, 99, 1, 'x', 'i', 'a', 'o', 'm', 'i', 'n', 'g']

list2 = ['duoceshi']
list1.extend(list2)
print(list1)                 # ['test', 'dcs8', 888, 99, 1, 'x', 'i', 'a', 'o', 'm', 'i', 'n', 'g', 'duoceshi']

2.5、insert函数 索引位插入值

list1 = ['test','dcs8',888,99,1]
list1.insert(0,'china')
print(list1)                     # ['china', 'test', 'dcs8', 888, 99, 1]

2.6、index函数 ==》查看字符对应的索引值

list1 = ['test','dcs8',888,99,1]
print(list1.index('test'))       # 结果为:0

2.7、remove函数 ==》删除列表中对应的字符

list1 = ['test','dcs8',888,99,1,'dcs8']
list1.remove('dcs8')
print(list1)                       # ['test', 888, 99, 1, 'dcs8']
# 注意:如果列表中有多个相同的元素,会删除前面那个

2.8、del 通过索引和切片删除值

list1 = ['test','dcs8',888,99,1]
del list1[-1]
print(list1)                         # ['test', 'dcs8', 888, 99]

del list1[1:]
print(list1)                         # ['test']

2.9、sort函数 ==》从小到大进行排序

list1 = [888,99,1,12,87,111]
list1.sort()
print(list1)                     # [1, 12, 87, 99, 111, 888]

list1.sort(reverse=True)         # [888, 111, 99, 87, 12, 1]
print(list1)

# 如果列表当中都是字符串就通过ASCII码进行排序、字符串和整型不能一起进行排序
list1 = ['test','99','1','china','dcs8','AB']
list1.sort()
print(list1)                    # ['1', '99', 'AB', 'china', 'dcs8', 'test']

2.10、sorted函数 排序

list1 = [888,99,1,12,87,111]
print(sorted(list1,reverse=True))     # 降序排序  [888, 111, 99, 87, 12, 1]
print(sorted(list1,reverse=False))    # 升序排序  [1, 12, 87, 99, 111, 888]

2.11、reverse函数 ==》反转(重点)

list1 = [888,99,1,12,87,111]
list1.reverse()
print(list1)                            # [111, 87, 12, 1, 99, 888]

2.12、pop函数 删除

list1 = [888,99,1,12,87,111]
print(list1.pop())          # 111     打印出被删除的这个值、默认删除列表当中最后的一个值

print(list1)                # [888, 99, 1, 12, 87] 打印出删除之后剩余的值

print(list1.pop(0))         # 888    打印出删除对应的索引位的值

print(list1)                # [99, 1, 12, 87]     打印出删除之后剩余的值

列表嵌套

name_list = [['TOM', 'Lily', 'Rose'], ['张三', '李四', '王五'], ['xiaohong', 'xiaoming', 'xiaolv']]

# print(name_list)

# 列表嵌套的时候的数据查询
print(name_list[0])             # ['TOM', 'Lily', 'Rose']
print(name_list[0][1])          # Lily





# 需求:8位老师,3个办公室, 将8位老师随机分配到3个办公室

步骤:
1. 准备数据
    1.1 8位老师 -- 列表
    1.2 3个办公室 - 列表嵌套

2. 分配老师到办公室
    *** 随机分配
    就是把老师的名字写入到办公室列表 -- 办公室列表追加老师名字数据

3. 验证是否分配成功
    打印办公室详细信息:每个办公室的人数和对应的老师名字

import random

# 1. 准备数据
teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
offices = [[], [], []]

# 2. 分配老师到办公室 -- 取到每个老师放到办公室列表 -- 遍历老师列表数据
for name in teachers:
    # 列表追加数据 -- append(选中) extend insert
    # xx[0] -- 不能指定是具体某个下标 -- 随机
    num = random.randint(0, 2)
    offices[num].append(name)
# print(num)

# print(offices)

# 为了更贴合生活,把各个办公室子列表加一个办公室编号 1, 2, 3
i = 1
# 3. 验证是否分配成功
for office in offices:
    # 打印办公室人数 -- 子列表数据的个数  len()
    print(f'办公室{i}的人数是{len(office)},老师分别是:')
    # 打印老师的名字
    # print()  --  每个子列表里面的名字个数不一定 -- 遍历 -- 子列表
    for name in office:
        print(name)

    i += 1

列表推导式

列表变量名 = [x for x in range(开始值,结束值,步长)]
列表变量名 = [x for x in range(开始值,结束值,步长) if 条件]
list1 = [x for x in range(0, 10)]
print(list1)                                   # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

list1 = [x for x in range(0, 100)]
print(list1)                                   # [0, 1, 2, 3, 4,.....,99]

list1 = [x for x in range(5, 20, 3)]
print(list1)                                   # [5, 8, 11, 14, 17]

list1 = [x for x in range(30, 20, -1)]
print(list1)                                   # [30, 29, 28, 27, 26, 25, 24, 23, 22, 21]

list1 = [x for x in range(6, -10, -2)]        
print(list1)                                   # [6, 4, 2, 0, -2, -4, -6, -8]

list1 = [x for x in range(0, 10) if x % 2 == 0]
print(list1)                                   # [0, 2, 4, 6, 8]

练习:列表推导式输出0-100中10的倍数

a = [x for x in range(1,101) if x % 10 == 0]
print(a)            # [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
vec = [-4, -2, 0, 2, 4]

# 新生成一个列表,该列表中的每个元素是vec列表中每个元素的2倍
a = [x*2 for x in vec]
print(a)                      # [-8, -4, 0, 4, 8]

# 利用if语句对列表进行过滤,将小于0的元素过滤掉
a = [x for x in vec if x >= 0]
print(a)                      # [0, 2, 4]

# 对列表中每个元素应用函数,比如使用abs()函数对每个元素取绝对值
a = [abs(x) for x in vec]
print(a)                      # [4, 2, 0, 2, 4]

# 对列表中每个元素调用方法
freshfruit = ['  banana', 'loganberry  ', 'passion fruit  ']
a = [weapon.strip() for weapon in freshfruit]
print(a)                      # ['banana', 'loganberry', 'passion fruit']

# 创建一个元素由元祖组成的列表,形式为(数字x,数字x的平方)
a = [(x, x**2) for x in range(6)]
print(a)                      # [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]

# 创建一个元素由列表组成的列表,形式为[数字x,数字x的平方]
a = [[x,x**2] for x in range(6)]
print(a)                      # [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25]]

# 利用两个for循环将一个嵌套二维列表降为一维列表
vec = [[1,2,3], [4,5,6], [7,8,9]]
a = [num for elem in vec for num in elem]
print(a)                     # [1, 2, 3, 4, 5, 6, 7, 8, 9]

嵌套列表推导式

for循环

a = []

for i in range(4):
    a.append([row[i] for row in matrix])

print(a)       # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

 使用嵌套列表推导式:

a = [[row[i] for row in matrix] for i in range(4)]

print(a)      # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

字典推导式

# 创建字典 key是1-5的数字,v是这个数字的平方
# dict1 = {k: v for i in range(1, 5)}
dict1 = {i: i**2 for i in range(1, 5)}
print(dict1)            # {1: 1, 2: 4, 3: 9, 4: 16}

 两个列表合并

list1 = ['name', 'age', 'gender', 'id']
list2 = ['Tom', 20, 'man']

dict1 = {list1[i]: list2[i] for i in range(len(list2))}
print(dict1)         # {'name': 'Tom', 'age': 20, 'gender': 'man'}

# 总结:
# 1. 如果两个列表数据个数相同,len统计任何一个列表的长度都可以
# 2. 如果两个列表数据个数不同,len统计数据多的列表数据个数会报错;len统计数据少的列表数据个数不会报错

提取字典中的目标数据

counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'acer': 99}

# 1. 需求:提取电脑台数大于等于200
# 获取所有键值对数据,判断v值大于等于200 返回  字典
# print(counts.items())
dict1 = {key: value for key, value in counts.items() if value >= 200}
print(dict1)        # {'MBP': 268, 'DELL': 201}

集合推导式

list1 = [1, 1, 2]

set1 = {i ** 2 for i in list1}
print(set1)         # {1, 4}
# 集合有去重功能所以这个集合数据只有两个数据分别是1, 4

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值