列表(2021-9-22)

2021-9-22

列表

一、列表相关操作

1、数学运算符:+、*
1)列表1 + 列表2:将两个列表中的元素合并产生一个新的列表

例:[x, y, z] + [a, b, c] -> [x, y, z, a, b, c]

2)* N / N * 列表:列表中的元素重复N次产生一个新的列表
nums1 = [1, 2, 3]
nums2 = [4, 5, 6]
print(nums1 + nums2)           # [1, 2, 3, 4, 5, 6]

print(nums1 + nums1)           # [1, 2, 3, 1, 2, 3]
print(nums1 * 2)               # [1, 2, 3, 1, 2, 3]
2、比较运算符
1)==、 !=
2)>、<、>=、<= – 比较的是第一对不相等

列表1 > 列表2

print([1, 2, 3] == [1, 2, 3])  # True
print([1, 2, 3] == [3, 2, 1])  # False

print([1, 37, 34, 546] > [20, 34, 36])   # False
print([1, 37, 34, 546] > [1, 34, 36])    # True
print([1, 2, 3] > 200)                 # 报错
3、in 和 not in

元素 in 列表 – 判断列表中是否存在指定元素
元素 not in 列表 – 判断列表中是否不存在指定元素

print(10 in [10, 20, 30])                # True
print(100 in [10, 20, 30])               # False
print([10, 20] in [10, 20, 30])          # False
print([10, 20] in [[10, 20], 30])        # True

练习、有两个列表A和B,使用列表C来获取两个列表中公共的元素
例如: A = [1, ‘a’, 4, 90] B = [‘a’, 8, ‘j’, 1] --> C = [1, ‘a’]

A = [1, 'a', 4, 90, 1]
B = ['a', 8, 'j', 1]
C = []
for a in A:
    if a in B and a not in C:
        C.append(a)
print(C)

练习2、有一个长度是10的列表,数组内有10个人名,要求去掉重复的
例如:names = [‘张三’, ‘李四’, ‘大黄’, ‘大黄’, ‘张三’, ‘张三’, ‘张三’] -> names = [‘张三’, ‘李四’, ‘大黄’]

names = ['张三', '李四', '大黄', '大黄', '张三', '张三', '张三']
new_names = []
for a in names:
    if a not in new_names:
        new_names.append(a)
print(new_names)

练习、提取分数列表中90分以上的成绩

scores = [90, 89, 23, 67, 99, 96, 56, 78, 91, 45]
new_scores = []
for a in scores:
    if  a >= 90:
        new_scores.append(a)
print(new_scores)                 # [90, 99, 96, 91]

二、列表相关函数

1、max和min

from typing import List
max(序列) - 获取序列中元素的最大值
min(序列) - 获取序列中元素的最小值
注意:序列中的元素之间必须支持比较大小的操作

nums = [345, 456, 43, 432, 545, 432, 34]

print(max(nums))                       # 545
print(min(nums))                       # 34
2、求最大值、最小值的套路
nums = [345, 456, 43, 432, 545, 432, 34]
最大值
max1 = nums[0]
for a in nums[1:]:
    if a > max1:
        max1 = a
print(max1)
最小值
min1 = nums[0]
for a in nums[1:]:
    if a < min1:
        min1 = a
print(min1)
3、sum - 求数字和

sum(数字序列) - 计算序列中所有元素的和

nums = [345, 456, 43, 432, 545, 432, 34]
print(sum(nums)/len(nums))             # 平均
print(sum(nums))                       # 求和
4、sorted

sorted(序列) - 将序列中的元素从小到大(升序)排序,产生一个新的列表
sorted(序列, reverse=True) - 将序列中的元素从大到小(降序)排序,产生一个新的列表
要求:

nums = [345, 456, 43, 432, 545, 432, 34]
new_nums = sorted(nums)
print(new_nums)            # [34, 43, 345, 432, 432, 456, 545]

nums = {345, 456, 43, 432, 545, 432, 34}
new_nums = sorted(nums)
print(new_nums)            # [34, 43, 345, 432, 456, 545]

nums = [345, 456, 43, 432, 545, 432, 34]
new_nums = sorted(nums, reverse=True)
print(new_nums)            # [545, 456, 432, 432, 345, 43, 34]
5、len - 统计元素个数

len(序列) - 统计序列中元素的个数

print(len(nums))           # 7
print(len('abc'))          # 3
6、list

list(序列) - 将指定的数据转换为列表
1、能不能转(序列,容器)
2、怎么转(所有的序列可以转换成列表;是将序列中的元素作为列表元素)

print(list('abc123'))      # ['a', 'b', 'c', '1', '2', '3']
print(list(range(3, 10)))  # [3, 4, 5, 6, 7, 8, 9]
7、enumerate

[10, 20, 30] -> [(0, 10), (1, 20), (2, 300)]
for 变量1, 变量2 in enumerate(列表):
变量1是每个元素的下标
变量2是每个元素

nums = [345, 456, 43, 432, 545, 432, 34]
for a, b in enumerate(nums):
    print(a, b)

三、列表相关方法

方法:列表.xxx()

1、列表.clear() - 清空列表
nums = [20, 99, 78, 'abc']
nums.clear()
print(nums)                         # [](效率高,原列表)
nums = [20, 99, 78, 'abc']
nums = []
print(nums)                         # [](效率低,新列表)
2、列表.copy() - 复制原列表产生一个一模一样的新列表

如果直接用一个变量 给另一个变量赋值,赋的是地址。赋值后两个变量指向的是同一个数据
注意:列表[:]、列表*1、列表+[] 的功能和列表.copy()的效果一样

list1 = [10,'abc', 100]
list2 = list1.copy()
print(list2)                        # [10, 'abc', 100]
list1.append(20)
print(list2)                        # [10, 'abc', 100]

注意:list2复制list1的值产生一个新的地址,当list1改变值以后,list2不会变

print('----------------------------------------------------------------')
list2 = list1
print(list2)                        # [10, 'abc', 100]
list1.append(20)
print(list2)                        # [10, 'abc', 100, 20]
print(id(list1), id(list2))

注意:list2复制list1的地址和值,当list1改变值以后,list2也会随之改变

3、列表.count(元素) - 统计指定元素在列表中出现的个数
nums = [10, 23, 43, 54, 76, 10, 45, 43]
print(nums.count(10))               # 2
print(nums.count(100))              # 0
4、列表.extend(序列) - 将序列中的元素全部添加到列表中
nums = [100, 200]
scores = [90, 89, 34, 56, 76]
nums.extend(scores)
print(nums)                         # [100, 200, 90, 89, 34, 56, 76]
nums = [100, 200]
nums.extend('abc')
print(nums)                         # [100, 200, 'a', 'b', 'c']
nums = [100, 200]
nums.append('abc')
print(nums)                         # [100, 200, 'abc']
5、列表.index(元素) - 获取元素的下标值(0开始的下标值)

注意:如果元素不存在会报错,如果元素有多个返回最前面那一个元素的下标

nums = ['张三', '李四', '王五', '李四']
print(nums.index('李四'))            # 1
print(nums.index('李四'))            # 1
6、列表.reserve() - 将列表中的元素逆序
names = ['张三', '李四', '王五', '李四']
names.reverse()
print(names)
7、

列表.sort() - 将列表中的元素从小到大排序(直接修改原列表中元素的顺序,不会产生新的列表)
列表.sort(reverse=True) - 将列表中的元素从大到小排序(直接修改原列表中元素的顺序,不会产生新的列表)

scores = [90, 89, 34, 56, 76]
scores.sort()
print(scores)                       # [34, 56, 76, 89, 90]
scores.sort(reverse=True)
print(scores)                       # [90, 89, 76, 56, 34]

四、列表推导式(重)

1、列表推导式 - 创建列表的快捷方式

语法1(将序列中的元素按照统一的规则整体变换):

[表达式 for 变量 in 序列]
相当于:
list1 = []
for 变量 in 序列:
    list1.append(表达式)

语法2(对序列中的元素进行筛选/删除):

[表达式 for 变量 in 序列 if 条件语句]
相当于:
list1 = []
for 变量 in 序列:
    if 条件语句:
        list1.append(表达式)

语法3:
[三目运算符 for 变量 in 序列]
补充:三目运算符
c语言的三目运算符 - ?:
表达式?值1:值2

Python的三目运算符
值1 if 表达式 else 值2 - 如果表达式的值为True,整个运算的结果是值1,否则是值2

list1 = [10 for a in range(3)]
print(list1)                 # [10, 10, 10]
list2 = [a for a in range(3)]
print(list2)                 # [0, 1, 2]
list3 = [a*10 for a in range(3)]
print(list3)                 # [0, 10, 20]
练习、将nums中所有的元素乘以10,产生一个新的列表
nums = [12, 33, 7, 9]
list1 = [a*10 for a in nums]
print(list1)                 # [120, 330, 70, 90]

练习、将nums中所有的元素的个位数提取出来,产生一个新的列表

nums = [12, 33, 7, 9]
list2 = [a%10 for a in nums]
print(list2)                 # [2, 3, 7, 9]
print('---------------------------------------------------')
nums =[12, 33, 7, 9]
list3 = [a for a in nums if a % 2]
print(list3)                 # [33, 7, 9]

练习、利用列表推导式删除scores中小于60的分数

scores = [89, 34, 56, 90, 56, 78, 99]
new_scores = [a for a in scores if a > 60]
print(new_scores)            # [89, 90, 78, 99]
age = 8
result = '成年' if age >= 18 else '未成年'
print(result)

练习:利用列表推导式将nums中所有的偶数除以2,所有的奇数乘以2

nums = [20, 34, 33, 6, 15, 7, 20]
new_scores = [a//2 if a % 2 == 0 else a * 2 for a in nums ]
print(new_scores)            # [10, 17, 66, 3, 30, 14, 10]

练习:偶数除以2, 奇数不变

[10, 17, 33, 3, 15, 7, 10]
new_scores = [a if a % 2 else a // 2 for a in nums]
print(new_scores)            # [10, 17, 33, 3, 15, 7, 10]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值