python列表

  • Post author:
  • Post category:python




列表


1) 列表长什么样子:

列表是容器型数据类型(序列),将[]作为容器的标志,里面多个元素用逗号隔开: [元素1、元素2、元素3…]


2) 列表的特点:

列表是可变的(元素的个数、值、顺序可变)- 增、删、改; 列表是有序的 – 支持下标操作


3) 列表对元素的要求:

没有要求,不管什么数据都可作为列表的元素(万物皆可列表)

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

list0 = [] # 空列表
list1 = ['Google', 'Runoob', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
list4 = ['red', 'green', 'blue', 'yellow', 'white', 'black']



1. 查 – 访问列表中的值



1.1 获取单个元素


语法

:列表[下标]


说明

列表 – 任何结果是列表的表达式,比如:保存列表的变量、具体的列表值等。

[ ] – 固定写法

下标 – 下标又叫索引,是元素在有序序列中的位置信息。

python中有序序列中每个元素都有2组下标值,分别是:从前往后由0开始递增的下标值;从后往前由-1开始递减的下标值。

注意: 下标不能越界

name1 = ['诸葛亮', '貂蝉', '刘备', '吕布']
print(name1[0],name1[1])
print(name1[-1],name1[-2])
"""
输出结果:
诸葛亮 貂蝉
吕布 刘备
"""


1.2 切片 – 截取列表


语法

:列表[始下标 : 终下标 : 步长]


说明

始下标 – 下标值(0开始的和-1开始都行); 确定切片的优先范围的起点,可以取到

  • 固定写法

终下标 – 下标值(0开始的和-1开始都行);确定切片的有效范围的终点,取不到

步长 – 1)决定切片方向(步长对应的方向必须和开始到结束的方向一致,否则结果为空)

2)获取元素的方式(一个一个取还是跳着取)




: 切片的有效范围是: [开始下标, 结束下标)

list = ['Google', 'Runoob', "Zhihu", "Taobao", "Wiki"]
 
# 从第二位开始(包含)截取到第四位(不包含)
print ("list[1:3]: ", list[1])
# 从第二位开始(包含)截取到倒数第二位(不包含)
print ("list[1:-2]: ", list[1:-2])
"""
输出:
list[1:3]:  ['Runoob', 'Zhihu']
list[1:-2]:  ['Runoob', 'Zhihu']
"""
list1 = ['王者荣耀', '英雄联盟', '冒险岛', '诛仙', '穿越火线', '部落冲突', '魂斗罗', '地下城', '和平精英']


1.2-1 省略开始下标


语法

:列表[:终下标;步长] / 列表[:终下标]

省略开始下标,开始位置由步长决定 – 步长为正,从0下标开始取;步长为负,从-1下标开始取

print(list1[:4]) # ['王者荣耀', '英雄联盟', '冒险岛', '诛仙']
print(list1[:4:-1]) # ['和平精英', '地下城', '魂斗罗', '部落冲突']
'''
输出:
['王者荣耀', '英雄联盟', '冒险岛', '诛仙']
['和平精英', '地下城', '魂斗罗', '部落冲突']
'''


1.2-2 省略结束下标


语法

:列表[始下标::步长] / 列表[始下标:]

省略结束下标,结束位置由步长决定 – 步长为正,以最后个元素-1下标结束;步长为负,以第一个元素0下标结束

print(list1[-3::-2]) # ['魂斗罗', '穿越火线', '冒险岛', '王者荣耀']
print(list1[-3:]) # ['魂斗罗', '地下城', '和平精英']


1.2-3 省略始终下标


语法

:列表[::步长] / 列表[:]

省略下标,列表全取,开始位置步长决定,步长为正从0下标开始;步长为负从-1下标开始,省略步长,默认为1

print(list1[::-1]) # ['和平精英', '地下城', '魂斗罗', '部落冲突', '穿越火线', '诛仙', '冒险岛', '英雄联盟', '王者荣耀']
print(list1[:]) # ['王者荣耀', '英雄联盟', '冒险岛', '诛仙', '穿越火线', '部落冲突', '魂斗罗', '地下城', '和平精英']


1.3 遍历元素


方式1 – 获取元素


直接获取列表中的每个元素
for 元素 in 列表:
   循环体
for i in name1:
    print(i,end='\t')
"""
输出:诸葛亮  貂蝉  刘备  吕布
"""


方式2 – 获取下标

先获取到元素下标值,然后通过下标在获取元素

for 下标 in range(len(列表)):
    循环体
for j in range(len(name1)):
    print(name1[j])
"""
输出:诸葛亮  貂蝉  刘备  吕布
"""


方式3 – 同时获取元素、下标

同时获取列表中每个元素和元素对应的下标

for 下标,元素 in enumerate(列表):
    循环体
"""
输出:诸葛亮  貂蝉  刘备  吕布
"""


实例
# 练习1: 统计不及格人数
scores = [89, 67, 56, 90, 98, 30, 78, 51, 99]
count = 0
for i in scores:
    if i < 60:
        count += 1
print("不及格的人有:", count)

# 练习2:统计列表中整数的个数
count0 = 0
list7 = [89, 9.9, 'abc', True, 'abc', '10', 81, 90, 23]
for i in list7:
    if type(i) == int:
        count0 += 1
print('整数有:', count0)

"""
输出结果:
不及格的人有: 3
整数有: 4
"""



2. 增 – 添加元素



2.1 添加单个元素

语法:

列表.append(元素) – 在列表的最后添加一个元素

列表.insert(下标,元素) – 在指定下标位置前面插入元素

list1 = ['让子弹飞', '邪不压正']
list1.append('无双')  # 在列表末端添加
list1.insert(1,'大话西游')  # 在下标为1的前面添加
"""
输出结果:
['让子弹飞', '大话西游', '邪不压正', '无双']
"""


2.2 批量添加

语法:

列表1.extend(列表2) – 将列表2元素全部添加到列表1的后面

参数说明:

列表2 – 元素列表,可以是列表、元组、集合、字典,若为字典,则仅会将键(key)作为元素依次添加至原列表的末尾。

list1.extend(['触不可及','钢铁侠'])
print(list1)
"""
输出结果:
['让子弹飞', '大话西游', '邪不压正', '无双', '触不可及', '钢铁侠']
"""


实例
# 1. 提取及格的分数 (append使用)
scores = [89, 67, 56, 90, 98, 30, 78, 51, 99]
jige = []
for i in scores:
    if i >= 60:
        jige.append(i)
jige.sort()
print(jige)
"""
结果:[67, 78, 89, 90, 98, 99]
"""
# 2. 添加其他类型数据到列表  (extend使用)
language = ['French']
# 元组
language_tuple = ('Spanish', 'Portuguese')
# 集合
language_set = {'Chinese', 'Japanese'}
# 添加元组到列表末尾
language.extend(language_tuple)
print('加上元组列表: ', language)
 
# 添加集合到列表末尾
language.extend(language_set)
print('加上集合新列表: ', language)
"""
输出结果:
新列表:  ['French', 'Spanish', 'Portuguese']
新列表:  ['French','Spanish', 'Portuguese', 'Chinese', 'Japanese']
"""



3. 删 – 删除列表元素

teleplays = ['琅琊榜', '大秦', '天下第一', '庆余年', '大秦', '亮剑', '西游记']


3.1 del


语法

:del 列表[下标] – 删除列表指定元素

注: 下标不能越界

del teleplays[2]
print(teleplays)
# ['琅琊榜', '大秦', '庆余年', '大秦', '亮剑', '西游记']


3.2 remove


语法

:列表.remove[元素] – 删除列表中指定元素的第一个匹配项

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

​ b. 如果列表存在重复值,只删除第一个

teleplays.remove('大秦')
print(teleplays) 
# ['琅琊榜', '天下第一', '庆余年', '大秦', '亮剑', '西游记']


3.3 pop


语法

:列表.pop(下标(可省,默认最后一个元素))

取出列表中指定下标对应的元素,并且返回该元素的值

del_item = teleplays.pop() # 移除最后一个元素,并保存下元素
del_item1 = teleplays.pop(1) # 移除下标是1的元素,并保存下元素
print(del_item, del_item1, teleplays, sep='\t')
# 西游记	大秦	['琅琊榜', '天下第一', '庆余年', '大秦', '亮剑']


3.4 clear


语法

:列表.clear() – 清空列表

teleplays.clear()
print(teleplays) # []


练习
# 练习:删除列表中低于60分的成绩
scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
i = 0
while i < len(scores):
    if scores[i] < 60:
        del scores[i]
        continue
    i += 1
print(scores)



4. 改 – 修改元素值


语法

:列表[下标] = 值

将列表中指定下标对应的元素改成指定的值

teleplays[1], teleplays[2] = '伪装者', '琅琊榜2风起长林'
print(teleplays)
# ['琅琊榜', '伪装者', '琅琊榜2风起长林', '庆余年', '大秦', '亮剑', '西游记']


练习
# 练习:将低于60分的成绩全部改成0分
scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
for i in range(len(scores)):
    if scores[i] < 60:
        scores[i] = 0
print(scores)



5.列表相关操作



5.1 数学运算符: +、*
# 列表1 + 列表2  --  将列表1和列表2合并成一个新的列表(不改变原来列表)
# 列表1 * N     --  将N个列表1合并成一个新的列表
list1 = [1, 2, 3]
list2 = [6, 5, 4]
print(list1 + list2, list1, list2,sep=' -- ')
print(list1 * 3, list1)
'''
输出:
[1, 2, 3, 6, 5, 4] -- [1, 2, 3] -- [6, 5, 4]
[1, 2, 3, 1, 2, 3, 1, 2, 3] [1, 2, 3]
'''


5.2 比较运算符: ==、!=、>、<、>=、<=
# 1) ==、!=
print(list1 != [1,2,3]) # False
print(list1 == [3, 1, 2]) # False  列表是有序的
print({1,2,3} == {3,2,1}) # True  集合是无序的

# 2) 列表1 >(<、>=、<=) 列表2
# 两个列表比较大小的原理: 比较第一对不相等的元素的大小。(两个列表下标(0开始)相同的元素为一对)
print([1,5,3,4] > [1,2,4,5,6]) # True  第一对相同,比较5和2


5.3 in 和 not in
# 元素 in 列表  -  判断列表中是否有指定元素
# 元素 not in 列表  -  判断列表中是否没有这个元素
print(10 in [20,30,10,50]) # True
print(60 not in [20,30,10,50]) # True
print([10,20] in [[10,20],30,50]) # True



6. 列表相关方法

list1 = [1,2,3,6,9,5,1]


6.1 count – 统计个数


语法

:列表.count(元素) – 统计列表中指定元素的个数

print(list1.count(1)) # 2


6.2 index – 取首次出现下标


语法

:列表.index(元素) – 获取元素第一次出现在列表中的下标

print(list1.index(1)) # 返回下标0


6.3 reverse – 列表反向


语法

:列表.reverse() – 将列表反向逆序, [1,2] 变为 [2,1]

list1.reverse()
print(list1)
# [1, 5, 9, 6, 3, 2, 1]


6.4 sort -排序


语法

:列表.sort(reverse=True(默认是False小到大,可省))

将列表元素排序从小到大排序,参数=True表示大到小。

list1.sort() # 升序
print(list1)
list1.sort(reverse=True) # 降序
print(list1)
'''
输出:
[1, 1, 2, 3, 5, 6, 9] # 升序
[9, 6, 5, 3, 2, 1, 1] # 降序
'''


6.5 copy – 复制列表
'''
copy 和 = 的区别:
列表1 = [] 
使用'=': 列表2 = 列表  --  相当于列表2指向了列表1,列表2中数据改变了,列表1也会被改变
使用copy: 列表2 = 列表1.copy()  --  给列表1相同的数据给了列表2,都是独立的
'''



课后练习

1.已知一个数字列表,求列表中心元素。

lists = [1, 2, 3, 4, 5, 6, 7, 8, 9]
if len(lists) % 2 == 0:
    print('列表总数是偶数,中间2个数是:{}和{}'.format(lists[len(lists)//2-1],lists[len(lists)//2]))
else:
    print('列表中心元素是:', lists[len(lists)//2])

2.已知一个数字列表,求所有元素和。

lists = [1, 2, 3, 4, 5, 6, 7, 8, 9]
sum1 = 0
for item in lists:
    sum1 += item
print('列表所有元素和:', sum1)

3.已知一个数字列表,输出所有奇数下标元素。

lists = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print('列表奇数下标元素:')
for index in range(1, len(lists), 2):
    print(lists[index], end='\t')

4.已知一个数字列表,输出所有元素中,值为奇数的元素。

lists = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print('列表中奇数的元素有:')
for item in lists:
    if item % 2 != 0:
        print(item, end='\t')

5.已知一个数字列表,将所有元素乘二。

例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]

lists = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for index in range(len(lists)):
    lists[index] *= 2
print('列表所有元素乘二后的列表:', lists)

6.有一个长度是10的列表,数组内有10个人名,要求去掉重复的

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

names = ['王五', '小明', '李四', '大黄', '小明',  '大黄', '张三', '王五', '张三']
count = len(names) - 1
while count > -1 :
    if names.count(names[count]) > 1:
        del names[count]
    count -= 1
print('删除重复值的列表元素:', names)
# 删除重复值的列表元素: ['王五', '小明', '李四', '大黄', '张三']

7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)

lists = [1, 2, 3, 4, 5, 6, 7, 8, 9]
lists.remove(max(lists))
lists.remove(min(lists))
print('节目分数的平均分数是:', sum(lists) / len(lists))
# 节目分数的平均分数是: 5.0

8.有两个列表A和B,使用列表C来获取两个列表中公共的元素

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

list1 = [11, 22, 32, 4, 55, 62, 9]
list2 = [1, 22, 3, 4, 53, 62, 75, 8, 9, 10]
list3 = []
if len(list1) < len(list2):
    for item in list1:
        if item in list2:
            list3.append(item)
else:
    for item in list2:
        if item in list1:
            list3.append(item)
print('两个列表公共部分元素:', list3)
# 两个列表公共部分元素: [22, 4, 62, 9]

9.有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)

例如: nums = [19, 89, 90, 600, 1] —> 600

nums = [19, 89, 90, 600, 1]
nums.sort()
print('列表中的最大值:', nums[-1])
# 列表中的最大值: 600

10.获取列表中出现次数最多的元素

例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3] —> 打印:3

nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3]
count = 0
num1 = []
for item in nums:
    if count < nums.count(item):
        num1.clear()
        count = nums.count(item)
        num1.append(item)
    elif count == nums.count(item) and item not in num1:
        num1.append(item)
print('元素{}出现次数最多,共出现{}次'.format(num1, count))
# 元素[3]出现次数最多,共出现4次



版权声明:本文为weixin_44134356原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。