提示:以下是本篇文章正文内容,下面案例可供参考
在我们日常处理问题时总会遇到很多需要储存的数据,如果只是一两个可以使用变量。但是当数据量很多时就得使用列表来储存,会更快捷方便。
代码如下(示例):
names = ['海贼王', 100, 12.13, True, None, [20,30], '葫芦娃']
print(names)
# ['海贼王', 100, 12.13, True, None, [20, 30], '葫芦娃']
代码如下(示例):
"""
语法:
列表[索引] - 获取列表中指定索引对应的元素
说明:
列表 - 需要获取哪个列表中的元素
[] - 固定写法
索引 - 又叫下标,指的是列表中的元素在列表中的位置信息
python中有序的容器中元素的索引有两种:
第一种:元素从前往后对应的索引从0开始不断加1
第二种:元素从后往前对应的索引从-1开始不断减1
"""
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官']
print(names)
# ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官']
# 对应的下标和索引值[0,1,2,3,4,5,6]或者[-7,-6,-5,-4,-3,-2,-1]
# 查询柯南
print(names[2],names[-5])
# 柯南 柯南
#这里要注意,如果下标超过整体列表的长度就会报错!
# IndexError: list index out of range
提示:如果是从左往右查询注意第一个数的下标是0开始的,从右往左是-1开始的。
nums = [10, 89, 20, 30, 10, 56]
print(nums.index(56))
# 5
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官']
names.append('毛利小五郎')
print(names)
# ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官', '毛利小五郎']
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官']
names.append('毛利小五郎')
# 在柯南前面插入伏特加
names.insert(2,'伏特加')
print(names)
# ['琴酒', '灰原哀', '伏特加', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官', '毛利小五郎']
提示:extend是添加容器里面的每一个元素,就类似于写一个字符串'赤井秀一'它会把里面的4个字一个一个的添加进去,而append是直接添加这一整个字符串。
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官']
names.extend('赤井秀一')
print(names)
# ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官', '赤', '井', '秀', '一']
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官','毛利小五郎']
del names[-1]
print(names)
# ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官']
names = ['琴酒', '灰原哀', '毛利小五郎','柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官','毛利小五郎']
names.remove('毛利小五郎')
print(names)
# ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官', '毛利小五郎']
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官', '毛利小五郎']
names1 = names.pop()
names2 = names.pop(0)
print(names)
# ['灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官']
print(names1,names2)
# 毛利小五郎 琴酒
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官', '毛利小五郎']
names[-1] = '沉睡的小五郎'
print(names)
# ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官', '沉睡的小五郎']
提示:如果取元素的操作方向和步长方向不一致最后返回的结果一定是空列表[ ]。
a.如何确定切片的结果
第一步:确定结果是否为空 -> 看从开始下标到结束下标的方向和步长的方向是否一致。(步长为正表示从前往后取,步长为负表示从后往前取)
第二步:确定有效范围 -> 开始下标对应的元素取得到,结束下标对应的元素取不到
第三步:根据步长在有效范围内获取元素 -> 从开始下标开始取,步长绝对值为1就一个一个地取,步长绝对值为2就取一个跳过一个再取一个...
b.如何写切片的代码
开始下标 - 目标元素中第一个元素对应的下标
结束下标 - 目标元素中最后一个元素后面或者前面那个元素的下标。(后面还是前面看方向(步长是正还是负))
步长 - 由方向决定符号(正负),获取方式决定绝对值(一个一个地取绝对值为1,取1个跳1个再取一个绝对值为2,...)
"""
# 简单来说就是如果要取列表多个值,就找到开始的元素下标,结束的元素下标根据步长正负判断加一个还是减一个
# 从左往右取步长一定为正,从右往左取一定为负。
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官', '毛利小五郎']
# 取从毛利小五郎(下标-1或者7)到毛利兰的元素(3或者-5),因为步长为负所以结束的元素毛利兰的下标要减1(2或者-6)
print(names[-1:-6:-1])
print(names[7:2:-1])
#['毛利小五郎', '目暮警官', '阿笠博士', '贝尔摩德', '毛利兰']
#['毛利小五郎', '目暮警官', '阿笠博士', '贝尔摩德', '毛利兰']
# 方向不一样返回空列表
print(names[1:-1:-1])
# []
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官', '毛利小五郎']
print(names[1:4])
# ['灰原哀', '柯南', '毛利兰']
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官', '毛利小五郎']
print(names[:5])
# 因为默认值为1所以从左往右取
# ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德']
print(names[3::-1])
# ['毛利兰', '柯南', '灰原哀', '琴酒']
# 因为步长为-1所以从右往左取
# 把列表反过来取
print(names[::-1])
# ['毛利小五郎', '目暮警官', '阿笠博士', '贝尔摩德', '毛利兰', '柯南', '灰原哀', '琴酒']
"""
方法1: - 直接遍历列表
for 变量 in 列表:
循环体(变量依次获取到的就是列表中的每个元素)
"""
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德']
for i in names:
print('i:',i)
# i: 琴酒
# i: 灰原哀
# i: 柯南
# i: 毛利兰
# i: 贝尔摩德
"""
方法2:- 通过遍历下标来遍历列表
for 变量 in range(len(列表)):
循环体(变量依次取到到的是列表中每个元素的下标)
补充: len(列表) - 返回列表长度(列表中元素的个数)
"""
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德']
for index in range(len(names)):
print(index, names[index])
# 0 琴酒
# 1 灰原哀
# 2 柯南
# 3 毛利兰
# 4 贝尔摩德
enumerate函数在for循环中先定义两个变量index(下标),item(元素)可以直接取出元素和索引值
"""
方法3:
for 变量1, 变量2 in enumerate(列表):
循环体(变量1依次获取列表中每个元素下标,变量2依次获取列表中的每个元素)
"""
names = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德']
for index, item in enumerate(names):
print(index, item)
# 0 琴酒
# 1 灰原哀
# 2 柯南
# 3 毛利兰
# 4 贝尔摩德
# 这里其实只是对列表做了一个转换改成了以下的形式。
names = [(0,'琴酒'),(1, '灰原哀'),(2, '柯南'), (3,'毛利兰'),(4, '贝尔摩德')]
names1 = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德']
names2 = ['阿笠博士', '目暮警官', '毛利小五郎']
print(names1 + names2)
# ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官', '毛利小五郎']
names1 = ['柯南', '毛利兰']
print(2 * names1)
# ['柯南', '毛利兰', '柯南', '毛利兰']
print(names1 * 2)
# ['柯南', '毛利兰', '柯南', '毛利兰']
# 这里需要注意如果乘0的话是空列表
print(names1 * 0)
# []
# 乘1的话是创建一个和原列表里面元素一样的新列表
print(names1 * 1)
# ['柯南', '毛利兰']
names1 = ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德']
nums1 = [10, 20, 30, 100]
print(nums1 == names1)
# False
print(nums1 == [10, 20, 30, 100])
# True
print(names1 == ['琴酒', '灰原哀', '柯南', '毛利兰', '贝尔摩德'])
# True
# 如果比较的类型不是两个列表或者其中第一对元素类型不同都会报类型错误
# TypeError: '>' not supported between instances of 'int' and 'str'
# 左边列表的第一个元素小于右边的第一个元素(10<20)
print([10, 20, 30] > [20, 20, 30]) # Flase
# 左边列表第一个元素和右边列表第一个元素相等所以比较左右两边列表的第二个元素(30>20)
print([10, 30, 30] > [10, 20, 30]) # True
# 只要两个列表中第一个元素数据类型一样就能比较,字符串的比较是根据unicode编码表比较大小的,后面讲字符串时会详细说
print(['99', 20, 30] > ['100', 'abc'])
# True
nums1 = [10, 20, 30]
# 判断10和20是否存在
print(10 and 20 in nums1) # True
# 判断10是否不存在
print(10 not in nums1) # Flase
# 两个列表里面内容一样但是地址不相同
list1 = [20, 30]
list2 = [20, 30]
print(id(list1), id(list2))
# 18947584 18947648
# 这样赋值会让list1和list3关联起来,地址一样内容一样,任何一个列表进行修改另一个列表也会修改。
list3 = list1
print(id(list3))
# 18947584
print(list1 is list3) # True
print(list1 is list2) # Flase
要搞清python底层的存储逻辑,然后根据遇到的问题选择赋值的方法,python保存数据的底层逻辑。
scores = [89, 45, 88, 90, 91, 40, 72, 82, 87]
print(sum(scores))
# 684
scores = [89, 45, 88, 90, 91, 40, 72, 82, 87]
print(max(scores)) # 91
print(min(scores)) # 40
scores = [89, 45, 88, 90, 91, 40, 72, 82, 87]
print(sorted(scores))
# [40, 45, 72, 82, 87, 88, 89, 90, 91]
print(sorted(scores,reverse=True))
# [91, 90, 89, 88, 87, 82, 72, 45, 40]
# 注意这里是直接新建了一个列表而不是在原有的列表进行操作
scores = [89, 45, 88, 90, 91, 40, 72, 82, 87]
print(len(scores))
# 9
print(list('abc')) # ['a', 'b', 'c']
print(list(range(10, 16))) # [10, 11, 12, 13, 14, 15]
names = ['琴酒', '灰原哀', '毛利小五郎','柯南', '毛利兰', '贝尔摩德', '阿笠博士', '目暮警官','毛利小五郎']
print(names.clear())
# None
# 实现列表拷贝的方法:列表.copy()、列表[:](切片操作)、列表*1、列表+[]
# 这些方法复制出来的地址和原列表地址都是不同的
list1 = [10, 20, 30, 40]
list2 = list1.copy()
list3 = list1+[]
list4 = list1[::-1]
list1 = [10, 10, 30, 30, 10, 10, 30, 10]
print(list1.count(10)) # 5
print(list1.count(30)) # 3
print(list1.count(1)) # 0
# 如果列表中没有指定的数据统计的个数就是0个
# 不会创建新的列表,在原有的列表中直接进行降序操作
nums = [10, 40, 30, 90]
nums.reverse()
print(nums)
# [90, 30, 40, 10]
# 不会创建新列表在原列表中直接操作
scores = [89, 45, 88, 90, 91, 40, 72, 82, 87]
scores.sort()
print(scores) # [40, 45, 72, 82, 87, 88, 89, 90, 91]
scores.sort(reverse=True)
print(scores) # [91, 90, 89, 88, 87, 82, 72, 45, 40]
"""
语法:
[表达式 for 变量 in 容器]
原理:让变量去容器中取值,一个一个地,取完为止,每取一个值就计算一次表达式的结果,并且将结果作为列表中的一个元素
"""
print([x for x in range(0,21,2)])
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
print([x + 1 for x in range(0,21,2)])
# [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21]
"""
语法:
[表达式 for 变量 in 容器 if 条件语句]
原理:让变量去容器中取值,一个一个地取,取完为止,每取一个值就判断一次条件是否成立,如果成立就计算表达式的结果作为列表中的一个元素
"""
# 练习:利用列表推导式提取列表中所有的偶数
nums = [52, 96, 60, 10, 79, 37, 0, 90]
print([x for x in nums if x % 2 == 0])
# [52, 96, 60, 10, 0, 90]
list2 = [x + y for x in '是靖不是静' for y in '12']
print(list2)
# ['是1', '是2', '靖1', '靖2', '不1', '不2', '是1', '是2', '静1', '静2']
认识掌握列表只需要看着一篇就够了,列表是一个有序且可以更改的容器型数据类型,将[ ]作为容器的标志,支持索引操作,可以进行增删改查,当需要同时取很多元素时可以进行切片操作,还有很多观关于列表的基本操作。