Python列表

Python列表,第1张

1. 认识列表 1.1 什么是列表

1)列表是容器型数据类型(可以同时保存多个数据);
2)将中括号([])作为容器的标志,里面多个元素(一个容器中逗号隔开的每个独立的数据)用逗号隔开:[元素1,元素2,元素3];
3)列表是可变的:可变指的是元素的个数、元素的值和元素的顺序可变;列表支持增删改;
列表是有序的:列表支持下标 *** 作。
4)列表的元素:任何类型的数据都可以作为列表的元素。

1.2 列表中的元素类型

1)同一个列表中的元素类型可以相同

list2 = [78,45,25,66]
print(list2)

2)同一个列表中的元素类型可以不一样

list3 = [23,2.5,'abc',True,[10,2],{'a':10}]
print(list3)

3)一个列表可以作为另外一个列表的元素

list4 = [10,[20,30]]  # 列表中有2个元素
print(list4)
1.3 列表是有序的
print([10,20,30] == [20,30,20])  # False

# 集合无序
print({10,20,30} == {10,30,20})  # True
2. 获取元素 2.1 获取单个元素 2.1.1 语法

列表[下标]

2.1.2 说明

说明:
1)列表:可以是具体的某个列表,也可以是保存列表的变量;
2)[] :固定写法
3)下标:

整数,下标又叫索引,是元素在有序序列的位置信息

python中元素对应的下标有两种:1.从前往后从0开始不断增加的 2.从后往前-1开始不断减小的

games = ['英雄联盟','王者荣耀','开心消消乐','炉石传说','部队冲突','原神','绝地求生']
print(games[1],games[-6])
# print(['英雄联盟','王者荣耀','开心消消乐','炉石传说','部队冲突','原神','绝地求生'][1])   王者荣耀
print(games[-1])

# 注意:下标不能越界
# print(games[100])   # 报错 IndexError: list index out of range
2.2 获取部分元素(切片) 2.2.1 完整语法

列表[开始下标:结束下标:步长]

2.2.2 切片过程

1)第一步:确定结果是否为空:看步长对应的方向和开始下标到结束下标对应的方向是否一致,如果不一致,切片的结果一定是空
2)第二步:确定有效范围:从开始下标对应的元素到结束下标对应的元素就是有效范围,有效范围,内结束下标对应的元素取不到 - [开始下标,结束下标)
3)第三步:获取元素:步长的正负确定获取方向;步长绝对值确定获取的时候是否跳着取;

如果绝对值为1,表示一个一个的取;

绝对值为2,表示取一个跳一个;

绝对值为3,表示取一个跳过2个

2.2.3 写切片表达式获取指定的结果

1)第一步:确定开始下标:看结果中第一个元素在原列表的下标;
2)第二步:确定步长:看获取元素的方向来确定正负;看取值的时候跳过的情况确定绝对值
3)第三步:确定结束下标:[开始下标,结束下标)对应范围能够包含所有的已经获取到的元素

games = ['英雄联盟','王者荣耀','开心消消乐','炉石传说','部落冲突','原神','绝地求生']
print(games[1:-1:2])     # ['王者荣耀', '炉石传说', '原神']
print(games[1:-2:-2])    # []
print(games[4:0:1])      # []
print(games[2:-2:1])     # ['开心消消乐', '炉石传说', '部落冲突']
print(games[6:-6:-2])    # ['绝地求生', '部落冲突', '开心消消乐']

# 练习
print(games[1:-1:3])     # ['王者荣耀','部落冲突']
print(games[2:6:-2])     # []
print(games[0:5:4])      # ['英雄联盟','部落冲突']
print(games[6:-4:-1])    # ['绝地求生', '原神', '部落冲突']

# ['王者荣耀','开心消消乐','炉石传说']
print(games[1:4:1],games[-6:-3:1])
# ['开心消消乐','部落冲突']
print(games[2:5:2],games[-5:-2:2])

# ['原神','部落冲突','炉石传说']
print(games[5:2:-1],games[-2:-5:-1],games[-2:2:-1])

games = ['诛仙', '英雄联盟', '王者荣耀', '开心消消乐', '炉石传说', '部落冲突', '原神', '绝地求生']

# ['英雄联盟', '王者荣耀', '开心消消乐', '炉石传说']
print(games[1:5:1],games[1:-3:1])
# ['部落冲突', '王者荣耀']
print(games[5:1:-3],games[-3:1:-3])
# ['王者荣耀', '炉石传说', '原神']
print(games[2:-1:2])
# ['绝地求生', '炉石传说', '英雄联盟']
print(games[-1:0:-3])
2.2.4 切片省略写法

列表[开始下标:结束下标:步长]

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

省略步长的时候,步长为1。

movies = ['肖申克的救赎','双城之战','你的名字','海上钢琴师','风雨哈佛路','当幸福来敲门', '乡村老尸', '咒怨']
# 省略步长
print(movies[2:5])    # ['你的名字','海上钢琴师','风雨哈佛路']
print(movies[1:-2])   # ['双城之战','你的名字','海上钢琴师','风雨哈佛路','当幸福来敲门']
print(movies[-2:2])   # []

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

如果步长为正,从第一个元素开始往后取;如果步长为负,从最后一个开始往前取。

# 省略开始下标
movies = ['肖申克的救赎','双城之战','你的名字','海上钢琴师','风雨哈佛路','当幸福来敲门', '乡村老尸', '咒怨']
print(movies[:3])     # ['肖申克的救赎','双城之战','你的名字']
print(movies[:3:-1])  # ['咒怨','乡村老尸','当幸福来敲门','风雨哈佛路']
print(movies[:-2:-2]) # ['咒怨']

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

如果步长为正,从开始下标开始往后取,一直取到最后一个元素;

如果步长为负,从开始下标开始往前取,取到第一个元素为止。

# 省略结束下标
movies = ['肖申克的救赎','双城之战','你的名字','海上钢琴师','风雨哈佛路','当幸福来敲门', '乡村老尸', '咒怨']
print(movies[2:])     # ['你的名字','海上钢琴师','风雨哈佛路','当幸福来敲门', '乡村老尸', '咒怨']
print(movies[3::2])   # ['海上钢琴师','当幸福来敲门','咒怨']
print(movies[3::-2])  # ['海上钢琴师','双城之战']

#
print(movies[::2])    # ['肖申克的救赎', '你的名字', '风雨哈佛路', '乡村老尸']
print(movies[::-2])   # ['咒怨', '当幸福来敲门', '海上钢琴师', '双城之战']

练习:

movies = ['肖申克的救赎','双城之战','你的名字','海上钢琴师','风雨哈佛路','当幸福来敲门', '乡村老尸', '咒怨']
print(movies[-2::-3])    # ['乡村老尸','海上钢琴师','肖申克的救赎']
print(movies[3:6])       # ['海上钢琴师','风雨哈佛路','当幸福来敲门']
print(movies[:-3])       # ['肖申克的救赎','双城之战','你的名字','海上钢琴师','风雨哈佛路']
print(movies[:4:2])      # ['肖申克的救赎','你的名字']
print(movies[-4::2])     # ['风雨哈佛路','乡村老尸',]
print(movies[1::4])      # ['双城之战','当幸福来敲门']
print(movies[::3])       # ['肖申克的救赎','海上钢琴师','乡村老尸']
2.3 遍历列表

将列表中的元素一个一个的全部取完。

1)方法1:

'''
for 变量 in 列表
    循环体(变量依次取到的就是列表中的元素)
'''
movies = ['肖申克的救赎','双城之战','你的名字','海上钢琴师','风雨哈佛路','当幸福来敲门', '乡村老尸', '咒怨']
for x in movies:
    print(x)

nums = [28,73,55,60,98,21]

# 练习1:求nums中所有元素的和
s = 0
for x in nums:
    s += x
print(s)


# 练习2:统计nums中奇数的个数
count = 0
for x in nums:
    if x % 2:
        count += 1
print(count)

2)方法2:通过遍历下标来遍历元素。

'''
for 变量 in range(len(列表)):
    循环体(变量取到的是每个元素的下标,列表[下标就可以获取到元素])
'''
movies = ['肖申克的救赎','双城之战','你的名字','海上钢琴师','风雨哈佛路','当幸福来敲门', '乡村老尸', '咒怨']
for index in range(len(movies)):
    print(index,movies[index])

# range(M,N,step)  -  [M,N),步长为step
# range(8-1,-1,-1)
# 7,6,5,4,3,2,1,0,-1(要取到0)
for index in range(len(movies)-1,-1,-1):
    print(index,movies[index])

# -1,-2,-3,-4,-5,-6,-7,-8
for index in range(-1,-len(movies)-1,-1):
    print(index,movies[index])

3)方法3:同时获取下标和元素。

'''
for 变量1,变量2 in enumerate(列表):
    循环体(变量1依次获取到的是每个元素的下标,变量2依次获取到的是每个元素)
'''
movies = ['肖申克的救赎','双城之战','你的名字','海上钢琴师','风雨哈佛路','当幸福来敲门', '乡村老尸', '咒怨']
for index,item in enumerate(movies):
    print(index,item)
3. 增删改 3.1 增

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

nums = [10,20]
print(nums)

nums.append(100)
print(nums)      # [10, 20, 100]

nums.append(200)
print(nums)      # [10, 20, 100, 200]

nums = [10,20]
nums.append([100,200])
print(nums)      # [10, 20, [100, 200]]

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

nums = [10,20,30]
print(nums)        # [10, 20, 30]
nums.insert(1,100)
print(nums)        # [10, 100, 20, 30]

nums.insert(0,200)
print(nums)        # [200, 10, 100, 20, 30]

nums.insert(len(nums),300)
print(nums)        # [200, 10, 100, 20, 30]
3.1.1 练习

练习1:提取nums中所有的奇数然后创建一个新的列表

nums = [11, 20, 22, 39, 33, 7, 18, 2]
# [11, 39, 33, 7]
new_nums = []
for x in nums:
    if x % 2:
        new_nums.append(x)
print(new_nums)

练习2:输入一个数字,将输入的数字插入到nums中,要求插入后nums仍然是从小到大排序的

# 方法1:
nums = [10,23,45,67,89,200]
num = int(input('请输入一个整数:'))
for index in range(len(nums)+1):
    if num < nums[index]:
        nums.insert(index,num)
        break
else:
    nums.append(num)
print(nums)

# 方法2:
nums = [10,23,45,67,89,200]
num = int(input('请输入一个整数:'))
for index,item in enumerate(nums):
    if num < item:
        nums.insert(index, item)
        break
else:
    nums.append(num)
print(nums)
3.2 删除

1)del 列表[下标] - 删除列表中指定下标对应的元素。

games = ['英雄联盟','王者荣耀','开心消消乐','炉石传说','部落冲突','原神','绝地求生']
del games[2]
print(games)      # ['英雄联盟', '王者荣耀', '炉石传说', '部落冲突', '原神', '绝地求生']

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

games = ['英雄联盟','王者荣耀','开心消消乐','炉石传说','开心消消乐','部落冲突','原神','开心消消乐','绝地求生']
games.remove('开心消消乐')
print(games)   # ['英雄联盟', '王者荣耀', '炉石传说', '开心消消乐', '部落冲突', '原神', '开心消消乐', '绝地求生']

# games.remove('红警')
# print(games)     # ValueError: list.remove(x): x not in list

3)列表.pop() - 默认删除最后一个元素。

games = ['英雄联盟','王者荣耀','开心消消乐','炉石传说','部落冲突','原神','绝地求生']
x = games.pop()
print(games)   # games = ['英雄联盟', '王者荣耀', '开心消消乐', '炉石传说', '部落冲突', '原神']
print(x)       # 绝地求生

4)列表.pop(下标) - 删除指定位置的元素。

games = ['英雄联盟','王者荣耀','开心消消乐','炉石传说','部落冲突','原神','绝地求生']
x = games.pop(1)
print(games)  # ['英雄联盟', '开心消消乐', '炉石传说', '部落冲突', '原神', '绝地求生']
print(x)      # 王者荣耀
3.2.1 练习

练习1:删除score中所有低于60的元素

scores = [98, 79, 45, 55, 72, 64]
# 问题1:因为遍历的时候没有把原列表所有的元素都取到,导致删不干净
for x in scores:
    print('x:', x)    # 没有取到55
    if x < 60:
        scores.remove(x)
print(scores)      # [98, 79, 55, 72, 64]

'''
scores = [98, 79, 45, 55, 72, 64]
第一次循环:x = 98: if 98 < 6o -> if False
第二次循环:x = 79: if 79 < 6o -> if False
第三次循环:x = 45: if 45 < 60 -> if True -> scores.remove(45) -> scores = [98, 79,  55, 72, 64]
第四次循环:x = 72: if 72 < 60 -> if False
第五次循环:x = 64: if 64 < 60 -> if False
第六次循环:循环结束
'''

# 问题1解决方案1  -  备份:遍历一个,删另一个
scores = [98, 79, 45, 55, 72, 64]
# t_scores = scores[:]
for x in scores[:]:
    if x < 60:
        scores.remove(x)
print(scores)


# 方案2:用遍历下标的方式遍历列表  -  (-长度,-1)、(长度-1,0)
# -6,-5,-4,-3,-2,-1
scores = [98, 79, 45, 55, 72, 64]
for index in range(-len(scores),0,1):
    # print(index)
    if scores[index] < 60:
        del scores[index]
print(scores)     # [98, 79, 72, 64]

# 5,4,3,2,1,0
scores = [98, 79, 45, 55, 72, 64]
for index in range(len(scores)-1,-1,-1):
    if scores[index] < 60:
        del scores[index]
print(scores)     # [98, 79, 72, 64]


# 方案3:提取不需要删除的元素
scores = [98, 79, 45, 55, 72, 64]
new_scores = []
for x in scores:
    if x >= 60:
        new_scores.append(x)
print(new_scores)     # [98, 79, 72, 64]
# del scores            # 删除整个列表


# 方案4:被删除的元素下标不增加
scores = [98, 79, 45, 55, 72, 64]
index = 0
while index < len(scores):
    if scores[index] < 60:
        del scores[index]
    else:
        index += 1
print(scores)       # [98, 79, 72, 64]

'''
scores = [98, 79, 45, 55, 72, 64]
index = 0
第1次: while 0 < 6 -> while True: if scores[0] < 60  -> if 98 < 60 -> if False -> index += 1 -> index = 1
第2次: while 1 < 6 -> while True: if scores[1] < 60  -> if 79 < 60 -> if False -> index += 1 -> index = 2
第3次:  while 2 < 6 -> while True: if scores[2] < 60 -> if 45 < 60 -> if True -> del scores[2] 
        -> scores = [98, 79, 55, 72, 64]
第3次: while 2 < 5 -> while True: if scores[2] < 60 -> if 55 < 60 -> if True -> del scores[2]
        -> scores = [98, 79, 72, 64]
第4次: while 2 < 4 -> while True: if scores[2] < 60 -> if 72 < 60 -> if False -> index += 1 -> index = 3
第5次: while 3 < 4 -> while True: if scores[3] < 60 -> if 64 < 60 -> if False -> index += 1 -> index = 4
第6次: while 4 < 4 -> while False -> 循环结束!
'''
3.3 改

列表[下标] = 新值 - 将列表中指定下标对应的元素修改成指定的值.

games = ['英雄联盟','王者荣耀','开心消消乐','炉石传说','部落冲突','原神','绝地求生']
games[1] = '2048'
print(games)    # games = ['英雄联盟','王者荣耀','开心消消乐','炉石传说','部落冲突','原神','绝地求生']
3.4 in和not in

元素 in 列表 :判断列表中是否存在指定元素,如果存在就返回True,否则返回False.

games = ['英雄联盟','王者荣耀','开心消消乐','炉石传说','部落冲突','原神','绝地求生']
print('绝地求生' in games)  # True
print('2048' in games)    # False

print(10 in [10,20,30])       # True
print([10,20] in [10,20,30])  # False
print([10,20] in [[10,20],30])  # True
4. 作业

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

nums = [10,20,60,50,46]
index = int(len(nums)/2)
print(nums[index])

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

nums = [10,20,60,50,46]
s = 0
for x in nums:
    s += x
print(s)

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

nums = [11, 20, 22, 39, 33, 7, 18, 2]
for index in range(len(nums)+1):
    if index % 2:
        print(nums[index])

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

nums = [11, 88, 22, 39, 33, 7, 51, 2]
for x in nums:
    if x % 2:
        print(x)

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

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

nums = [1, 2, 3, 4]
for index in range(len(nums)):
    nums[index] *= 2
print(nums)

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

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

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

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

scores = [88,89,98,80,85,99,87]
scores.remove(max(scores))
scores.remove(min(scores))
new_scores = sum(scores)/len(scores)
print(new_scores)

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

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

A = [10,20,30,40,50]
B = [10,30,50,60,80]
C = []
for i in A:
    for j in B:
        if i == j:
            C.append(i)
print(C)

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

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

nums = [19, 89, 90, 600, 1]
new_nums = 0
for index,item in enumerate(nums):
    if new_nums < item:
        new_nums = nums[index]
print(new_nums)

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_max = 0
max = 0
for x in nums:
    count_x = nums.count(x)
    if count_max < count_x:
        count_max = count_x
        max = x
print('出现次数最多的元素:',max)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/714085.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存