day05/06列表的进阶

1.什么是列表(list)

**列表是容器型 数据类型;将[ ]作为容器的标志,里面多个元素用逗号隔开: [元素1, 元素2, 元素3,…]
元素:列表中的元素可以是任何类型的数据; 同一个列表中的元素的类型可以不同

特点:1.可变的(指的是元素的个数、元素的值和元素的顺序可变);2.有序的(元素有表示顺序的编号)

a = [ ]      a是一个空列表b =     [ 100,  200,  True,  'a b c' ]
c =     [ 100, 200, ['a b c', 123] ]

元素的要求:任何类型的数据都可以作为列表的元素

d = [100,12.5,  'a b c',[1, 2],(10, 20),{'name': '余婷', 'age': 18},{1, 5},lambda x: x**2]print(type(d))    # <class 'list'>
print(b)

练习:定义变量保存一个班所有学生的成绩

方法一:score 1 = 90 ,  score 2 = 78  score 3 = 56  , score 4 = 98,   score 5 = 99 ,   score 6 = 70方法二:scores = [90, 78, 56, 98, 99, 70]------

2. 获取列表元素 ( 查 )

1.获取单个元素

语法:列表[下标] - 获取指定下标对应的元素

说明:列表 - 任何结果是列表的表达式(具体的列表数据、保存列表数据的变量、…)

[ ] - 固定写法:

下标 - 又叫索引;它是元素在容器中的位置标志(元素在容器中的顺序值)
下标值的范围有两种:

**1)从0开始不断加1的下标值, 其中0表示第一个、1表示第二个、…
**

**2)从-1开始不断减1的下标值,其中 -1表示倒数第一个、-2 表示倒数第二个、…

**注意:下标不能越界

list1 = [10, 20, 30, 'a b c']print(list1[1], list1[-3])
print(list1[-1], list1[3])print(list1[10])        # IndexError: list index out of rangeprint(l ist1[-5])        # IndexError: list index out of range

2. 获取部分元素(列表切片) - 同时获取列表中的多个元素

1)语法:列表[开始下标:结束下标:步长]
2)规则:

a.如果步长为正,表示从前往后取(从开始下标到结束下标), 开始下标对应的元素能取到,结束下标对应的元素取不到
b.如果步长为负,表示从后往前取(从开始下标到结束下标), 开始下标对应的元素能取到,结束下标对应的元素取不到

movies = ['阿甘正传', '肖生克的救赎', '当幸福来敲门', '霸王别姬', '花样年华', '人在囧途']
print(movies[1:5:1])    # ['肖生克的救赎', '当幸福来敲门', '霸王别姬', '花样年华']
print(movies[1:-1:1])   # ['肖生克的救赎', '当幸福来敲门', '霸王别姬', '花样年华']
print(movies[5:1:1])    # []
print(movies[5:1:-1])   # ['人在囧途', '花样年华', '霸王别姬', '当幸福来敲门']
print(movies[5:1:-2])   # ['人在囧途', '霸王别姬']
print(movies[1:-1:-2])  # []
print(movies[1:-2:1])   # ['肖生克的救赎', '当幸福来敲门', '霸王别姬']
print(movies[-1:-5:-2])     # ['人在囧途', '霸王别姬']
print(movies[-4:2:1])   # []

1)省略步长: 列表[ 开始下标 : 结束下标 ]

省略步长就相当于步长为1: 列表[ 开始下标 : 结束下标 ] == 列表[ 开始下标:结束下标 :1 ]

names = ['海贼王', '火影', '死神', '妖精的尾巴', '柯南', '犬夜叉', '进击的巨人', '一人之下']
print(names[1:-2])      # ['火影', '死神', '妖精的尾巴', '柯南', '犬夜叉']
print(names[-1:5])      # []

2)省略开始下标: 列表 [ :结束下标 : 步长 ] / 列表[ : 结束下标 ]

如果步长为正,省略开始下标表示从第一个元素开始往后取,取到结束下标对应的位置,结束下标取不到。
如果步长为负,省略开始下标表示从最后一个元素开始往前取,取到结束下标对应的位置,结束下标取不到。

print(names[:-2])       # ['海贼王', '火影', '死神', '妖精的尾巴', '柯南', '犬夜叉']
print(names[:5:2])      # ['海贼王', '死神', '柯南']
print(names[:-3:-1])    # ['一人之下', '进击的巨人']

3)省略结束下标: 列表 [ 开始下标 : : 步长 ] / 列表[ 开始下标: ]

如果步长为正,省略结束下标,从开始下标取到最后一个元素
如果步长为负,省略结束下标,从开始下标取到第一个元素

names = ['海贼王', '火影', '死神', '妖精的尾巴', '柯南', '犬夜叉', '进击的巨人', '一人之下']
print(names[2:])        # ['死神', '妖精的尾巴', '柯南', '犬夜叉', '进击的巨人', '一人之下']print(names[-3::-1])    # ['犬夜叉', '柯南', '妖精的尾巴', '死神', '火影', '海贼王']print(names[4::-2])     # ['柯南', '死神', '海贼王']print(names[-2::-3])    # ['进击的巨人', '妖精的尾巴', '海贼王']

4)同时省略开始下标和结束下标:列表[::步长] / 列表[:]

开始下标和结束下标都省,那么整个选择范围就是原列表

print(names[::-1])   # 倒序  ['一人之下', '进击的巨人', '犬夜叉', '柯南', '妖精的尾巴', '死神', '火影', '海贼王']
print(names[::-2])   # ['一人之下',  '犬夜叉', 妖精的尾巴', '火影']
print(names[:])      # ['海贼王', '火影', '死神', '妖精的尾巴', '柯南', '犬夜叉', '进击的巨人', '一人之下']

3.遍历(一个一个的把所有元素取出来)

方法一: 直接遍历出列表中的元素
for 变量 in 列表:
循环体
(变量取到的就是列表中的元素)

方法二:通过遍历获取所有元素的下标 来 遍历元素

for 下标 in range(列表长度):
列表[下标]

方法三(了解)

for 下标, 元素 in enumerate(列表):
循环体


games = [‘斗地主’, ‘欢乐麻将’, ‘开心消消乐’, ‘三国杀’, ‘王者荣耀’, ‘英雄联盟’]

1)直接获取元素(掌握)

for item in games:print('item:', item)

2)直接获取下标,通过下标获取元素(掌握)

len(列表) - 获取列表中元素的个数: index 下标 索引

for index in range(len(games)):print('下标:', index, '元素:', games[index])

3)同时获取下标和元素(了解)

for index, item in enumerate(games):print('index:', index, 'item:', item)enumerate(games)  -> [(0, '斗地主'), (1, '欢乐麻将'),... ]for x in [12, 34, 45]:print(x)for x, y in [(1, 2), [10, 20], 'ab']:print('x y:', x, y)for x,y,z in [(1, 2, 3), (10, 20, 30), 'a b c', ['name', 'age', 'sex']]:print('x y z:', x, y, z)scores = [10, 78, 90, 8, 77, 65, 100]   ->  ['不及格', 78, 90, '不及格', 77, 65, 100]练习:1)用一个列表保存一个班10个学生的成绩scores = [45, 89, 78, 90, 65, 70, 23, 57, 100, 66]2)计算10个学生的总成绩3)计算10个学生的平均成绩length = len(scores)
sum 1 = 0
for item in scores:sum 1 += item
print('总成绩:', sum 1, '平均成绩:', sum 1 / length)4)统计不及格学生的人数count = 0
for item in scores:if item < 60:count += 1
print('不及格人数:', count)5)获取10个学生成绩最高成绩的值max 1 = scores[0]         # 假设第一个元素的值最大
for item in scores[1:]:if item > max 1:max 1 = item
print('最高分:', max 1)

3. 元素的增删改

1. 增 - 添加元素

1) 列表.append(元素) - 在列表的最后添加指定元素

names = ['余婷', '张瑞燕', '迪丽热巴', '古力娜扎']
print(names)    # ['余婷', '张瑞燕', '迪丽热巴', '古力娜扎']names.append('蔡徐坤')
print(names)    # ['余婷', '张瑞燕', '迪丽热巴', '古力娜扎', '蔡徐坤']

2) 列表.insert(下标, 元素) - 在指定下标对应的元素前插入指定元素

names.insert(2, ' 杨幂 ')
print(names)            # ['余婷', '张瑞燕', '杨幂', '迪丽热巴', '古力娜扎', '蔡徐坤']names.insert(0, '胡歌')   # ['胡歌', '余婷', '张瑞燕', '杨幂', '迪丽热巴', '古力娜扎', '蔡徐坤']
print(names)names.insert(-1, '彭于晏')
print(names)        # ['胡歌', '余婷', '张瑞燕', '杨幂', '迪丽热巴', '古力娜扎', '彭于晏', '蔡徐坤']

2. 删 - 删除元素

1) del 列表[下标]

names = ['胡歌', '余婷', '张瑞燕', '杨幂', '迪丽热巴', '古力娜扎', '彭于晏', '蔡徐坤']
del names[3]         # 删除 杨幂
print(names)        # ['胡歌', '余婷', '张瑞燕', '迪丽热巴', '古力娜扎', '彭于晏', '蔡徐坤']del names[-1]
print(names)      # ['胡歌', '余婷', '张瑞燕', '迪丽热巴', '古力娜扎', '彭于晏']del names[7]      # Index Error: list assignment index out of rangedel names         # 删除整个列表

2) 列表.remove(元素) - 删除列表中指定的元素

a. 如果元素不存在会报错

b. 如果元素有多个,只删第一个

names = ['胡歌', '余婷', '张瑞燕', '杨幂', '迪丽热巴', '古力娜扎', '彭于晏', '迪丽热巴', '蔡徐坤', '迪丽热巴']
names.remove('杨幂')
print(names)    # ['胡歌', '余婷', '张瑞燕', '迪丽热巴', '古力娜扎', '彭于晏', '迪丽热巴', '蔡徐坤', '迪丽热巴']names.remove('朱茵')   # ValueError: list.remove(x): x not in listnames.remove('迪丽热巴')
print(names)

3) 列表.pop( ) - 取出列表中最后一个元素, 并返回

列表.pop(下标) - 取出列表中指定下标对应的元素, 并返回(下标不能越界)

names = ['胡歌', '余婷', '张瑞燕', '杨幂', '迪丽热巴', '古力娜扎', '彭于晏', '蔡徐坤']
del_name = names.pop()
print(names, del_name)    # ['胡歌', '余婷', '张瑞燕', '杨幂', '迪丽热巴', '古力娜扎', '彭于晏'] 蔡徐坤del_name = names.pop(-2)
print(names, del_name)    # ['胡歌', '余婷', '张瑞燕', '杨幂', '迪丽热巴', '彭于晏'] 作业1:用一个列表保存学生的分数,删除列表中所有低于60分的成绩scores = [90, 45, 52, 10, 89, 67, 55, 32, 69, 100]最终结果: [90, 89, 67, 69, 100]

3. 改 - 修改元素的值

语法:列表[下标] = 新元素 - 修改指定下标对应的元素(下标不能越界)

teleplays = ['琅琊榜', '亮剑', '庆余年', '爱情公寓', '人民的名义', '甄嬛传', '请回答1988']
teleplays[3] = '爱情公寓4'
print(teleplays)

练习:scores = [10, 78, 90, 8, 77, 65, 100] -> [‘不及格’, 78, 90, ‘不及格’, 77, 65, 100]

方法一

scores = [10, 78, 90, 8, 77, 65, 100]
for index, item in enumerate(scores):if item < 60:scores[index] = '不及格'print(scores)   # ['不及格', 78, 90, '不及格', 77, 65, 100]

#方法二:

scores = [10, 78, 90, 8, 77, 65, 100]
new_scores = [ ]
for item in scores:if item < 60:new_scores.append('不及格')else:new_scores.append(item)
print(new_scores)    # ['不及格', 78, 90, '不及格', 77, 65, 100]

04. 列表相关操作

1.数学运算: +, *

1) 列表1 + 列表2 - 将两个列表合并成一个新的列表

list1 = [1, 2, 3]
list2 = [100, 200]
print(list1 + list2)    # [1, 2, 3, 100, 200]

2)列表N * N列表 - 列表中的元素重复 N 次产生一个新的列表(N是>=0的整数)

list3 = list1 * 3
print(list 3)          # [1,2,3, 1,2,3, 1,2,3]

2. 比较运算符

1)比较是否相等: ==, !=

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

补充:is 的用法

数据1 is 数据2 - 判断两个数据是否相等 (判断数据的地址)

数据1 == 数据2 - 判断两个数据是否相等 (判断数据的值)

注意:如果给不同的变量赋相同的可变值,地址不一样; 赋相同不可变的值地址相同

list1 = [1, 2, 3]
list2 = [1, 2, 3]
list3 = list1
print(list1 == list2)    # True
print(list1 is list2)    # False
print(list1 is list3)    # True

字典可变

a = {'name': 100}
b = {'name': 100}
print({'name': 100} == {'name': 100})    # True
print(a is b)   # False

元组不可变

x = (10, 20)
y = (10, 20)
print(x is y)    # True

数字和字符串不可变

m = 100
n = 100
print(m is n)   # Falsem = 'abc'
n = 'abc'
print(m is n)    # False

2) 比较大小: >, <, >=, <=

两个列表比较大小,就是比较第一对不相等的元素的大小

print ([1, 2, 3, 4, 5, 6] > [ 10, 0, 0, 0, 0]) # False

3. in 和 not in

元素 in 列表 - 判断列表中是否有指定的元素

print(10 in [100, 200])              # False
print(100 in [100, 200])             # True
print([1, 2] in [1, 2, 3])           # False
print([1, 2] in [10, 20, [1, 2]])    # True

练习1:有两个列表A和B,使用列表C来获取两个列表中公共的元素

例如: A = [1, ‘a’, 4, 90] B = [‘a’, 8, ‘j’, 1] --> C = [1, ‘a’]

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

练习2:有一个长度是10的列表,数组内有10个人名,要求去掉重复的

例如:names = [‘张三’, ‘李四’, ‘大黄’, ‘张三’] -> names = [‘张三’, ‘李四’, ‘大黄’]

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

05. 相关函数

sum、max、min、sorted、len、list

1)sum(序列) - 求序列中所有元素的和;要求序列中的元素必须是数字

scores = [90, 89, 78, 56, 77.9, 81]
print(sum(scores))

2)max(序列) - 获取序中最大的元素; 序列中的元素支持比较运算并且类型一致

print(max(scores))      # 90print(min(scores))

3)sorted(序列) - 将序列中的元素从小到大排序,返回排序之后的新列表

new_scores = sorted(scores)
print(scores)    # 不会修改原列表
print(new_scores)   # [56, 77.9, 78, 81, 89, 90]

sorted(序列, reverse=True) - 序列中的元素从大到小排序,返回排序之后的新列表

scores = [90, 89, 78, 56, 77.9, 81]
new_scores = sorted(scores, reverse=True)
print(new_scores)    # [90, 89, 81, 78, 77.9, 56]

4)len(序列) - 获取序列中元素的个数

5)list(数据) - 将数据转换成列表;

所有的序列都可以转换成列表; 将序列中的元素作为列表的元素

print(list('abc'))    # ['a', 'b', 'c']
print(list(range(4)))  # [0, 1, 2, 3]

06. 列表相关方法

1. 列表.clear() – 清空列表(删除列表中所有的元素)

nums = [10, 2, 100]
nums.clear()
print(nums)    # []

2. 列表.copy() - 复制原列表产生一个相同的新列表(数据相同,地址不同);浅拷贝

nums = [1, 2, 'abc']
new_nums = nums.copy()
print(new_nums)    # [1, 2, 'abc']
print(nums is new_nums)   # False

id(变量) - 获取变量中保存的地址(获取变量中保存的数据的地址)

print(id(nums), id(new_nums))

直接赋值和拷贝

list1 = [1, 2, 3]
list2 = list1      # 直接赋值
print(list2)   # [1, 2, 3]
list3 = list1.copy()    # 拷贝  list1[:]、list1*1、 list1+[]
print(list3)    # [1, 2, 3]list1.append(100)
print(list2)      # [1, 2, 3, 100]
print(list3)    # [1, 2, 3]

3. 列表.count(元素) - 统计指定元素在列表中的个数

scores = [90, 89, 89, 70, 100, 100, 23, 100, 89, 89]
print(scores.count(100))

练习:获取列表中元素出现最多的次数

max_count = 0
for x in scores:count = scores.count(x)if count > max_count:max_count = count
print(max_count)

4. 列表.extend(序列) - 将序列中所有的元素都添加到列表中

nums = [1, 2]
nums.extend('abc')
print(nums)    # [1, 2, 'a', 'b', 'c']nums.extend([10, 20, 30])
print(nums)    # [1, 2, 'a', 'b', 'c', 10, 20, 30]nums = [1, 2]
nums.append('abc')
print(nums)    # [1, 2, 'abc']nums.append([10, 20, 30])
print(nums)    # [1, 2, 'abc', [10, 20, 30]]

5. 列表.index(元素) - 获取指定元素在列表中下标(0 ~ 长度-1)

如果元素有多个,只返回第一个的下标(获取第一次出现的位置)

如果元素不存在,会报错

song = ['晴天', '大不了重头再来', '只因你太美', '成都', '晴天', '阳光总在风雨后']
print(song.index('只因你太美'))   # 2print(song.index('晴天'))        # 0print(song.index('偏爱'))        # ValueError: '偏爱' is not in list

6. 列表.reverse() - 将列表倒序

song = [‘晴天’, ‘大不了重头再来’, ‘只因你太美’, ‘成都’, ‘晴天’, ‘阳光总在风雨后’]

song.reverse()
print(song)

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

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

nums = [23, 99, 3, 56, 7, 23, 45]
nums.sort()
print(nums)    # [3, 7, 23, 23, 45, 56, 99]nums = [23, 99, 3, 56, 7, 23, 45]
nums.sort(reverse=True)
print(nums)   # [99, 56, 45, 23, 23, 7, 3]nums = [10, 20, 30, 10, 20, 40]
print(len(nums))    # 6
print(nums.count(20))   # 2
print(nums.index(30))  # 2

07. 列表的推导式

1.什么是列表推导式 - 用来快速产生一个列表的表达式

1)基本语法:

[表达式 for 变量 in 序列]

产生元素的原理:让变量去序列取值,一个一个的取每取一个值就将表达式的结果作为列表的一个元素
a = [ ]
for 变量 in 序列:
a.append(表达式)
返回 a

list1 = [1 for x in range(4)]   # [1, 1, 1, 1]list2 = [x for x in range(4)]   # [0, 1, 2, 3]list3 = [x**2 for x in range(4)]    # [0, 1, 4, 9]list4 = [x+y for x, y in enumerate([10, 20, 30])]    # [10, 21, 32]

2)带条件语句的推导式

语法:
[表达式 for 变量 in 序列 if 条件语句]

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

list5 = [x for x in range(10, 20) if x % 3 == 0]  # [12, 15, 18]
print(list5)
list6 = [x for x in range(10, 20) if x % 2]
print(list6)   # [11, 13, 15, 17, 19]

练习1:删除列表中分数低于60的成绩(筛选)

scores = [10, 89, 78, 56, 45, 30, 99, 89, 76]
new_scores = [x for x in scores if x >= 60]
print(new_scores)   # [89, 78, 99, 89, 76]

练习2:将列表中所有的元素乘以2(变形)

nums = [2, 5, 9, 20]
new_nums = [x*2 for x in nums]
print(new_nums)    # [4, 10, 18, 40]

day0506列表的进阶相关推荐

  1. python基础之字符串定义常见操作、列表定义进阶操作

    字符串 创建字符串 创建字符串有三种方式:' ' ," " , ''' ''' 三引号允许换行,并且可以保留换行 引用--访问字符串中的字符 引用是访问字符串中的一个字符 不能超出 ...

  2. python列表解析式如何使用_python列表解析式,生成器,及部分内建函数使用方法...

    标准库datetime 需要导入datetime模块: import datetime datetime模块: 对日期,时间,时间戳的处理 datetime的类方法 today  () now(tz= ...

  3. (兔C残篇)关于python 列表的介绍

    文章目录 1. 列表是什么? 1.1 创建列表的demo 1.2 列表元素的访问 1.3 列表的访问嵌套方法 demo 1.4 使用 Geany编译器,print语句报错解决方案 1.5 python ...

  4. autoHotkey进阶 --- 用于访问窗口对象-acc库的简单配置

    文章目录 autoHotkey进阶 --- 用于访问窗口对象-acc库的简单配置 引言 配置过程 资源 函数列表 autoHotkey进阶 - 用于访问窗口对象-acc库的简单配置 引言 access ...

  5. Typora markdown公式换行等号对齐_【精品软件 第3期】 有颜有料的编辑器——Typora

    相信大家在生活或工作中都或多或少需要在电脑上写写文章或笔记,多数人都选择用记事本或word来写. 但记事本只能记录简单的文字,遇到图片或者需要排版的文章就无从下手. word虽然能够插入图片和排版内容 ...

  6. python百度云资源-python学习资源--百度云

    资源已汇总,访问 资源汇总贴 检索~~不定期更新.整理资源~ 1 2019-3-3创建python资源列表 python进阶 Head First Python, 2英文版 4.pdf Python编 ...

  7. python第三周笔记_Python第三周 学习笔记(1)

    key-value键值对的数据的集合 可变的.无序的.key不重复 初始化: d = dict() d = {} d = dict(**kwargs) 如:d = dict(a=1,b=2) dict ...

  8. python内置数据结构_Python基础知识2-内置数据结构(下)

    bytes.bytearray #思考下面例子: a = 1b=aprint(a == b)#True print(a is b)#True print(id(a) is id(b))#False p ...

  9. Python之集合、解析式,生成器,函数

    一 集合 1 集合定义: 1 如果花括号为空,则是字典类型 2 定义一个空集合,使用set 加小括号 使用B方式定义集合时,集合内部的数必须是可迭代对象,数值类型的不可以 其中的值必须是可迭代对象,其 ...

最新文章

  1. Python动态变量名定义与调用
  2. ​再见 Seaborn!Altair 数据可视化已超神
  3. CentOS5.6环境安装oracle 10g(完整版)
  4. 不要争了!技术选择没那么重要
  5. Ubuntu批量转换图片格式
  6. 牛客网华为机试题训练汇总(JavaScript)
  7. H3CNE实验:Comware基本命令操作
  8. Comsol Multiphysics安装步骤详解
  9. pythonQQ连连看秒杀脚本
  10. macbook黑屏的三种解决方法
  11. 数字信号处理之期中斩神篇(一重 搬山)
  12. dw自动滚动图片_DW里怎么做图片自动播放
  13. h3c服务器增加硬盘,H3C服务器硬盘配置Raid
  14. 51单片机实战教程(22 看门狗)
  15. 【机器学习课程-华盛顿大学】:4 聚类和检索 4.4 MoG混合高斯模型和EM估计最大化
  16. 2023年“挑战杯”大学生课外学术科技作品竞赛有感
  17. 醉翁之意不在酒,网易“星球”意在用户数据
  18. Python实现炸金花小游戏
  19. windows下解压.bz文件
  20. highcharts logo remove

热门文章

  1. 亚马逊德国站卖家:提醒您税务及包装法合规事项!
  2. 工业数字化转型 — 工业现场总线
  3. Active Accessibility
  4. 头歌平台 --- 机器学习 --- 高斯混合聚类
  5. 【读书笔记】《游戏改变世界》
  6. mysql知识系列:查看用户密码、修改用户密码,对网上“update user set authentication_string=‘123456’ where user=‘root’;”纠错
  7. 蓝桥杯基础练习超全习题题解VIP版——BASIC-26.报时助手(护眼版)
  8. Pytorch快速计算余弦相似性矩阵
  9. thinkjs能在浏览器html文件,thinkjs 命令
  10. java如何将char转换成string_java中  如何将char类型转换成string 类型