Python列表

Python列表

1. 什么是列表

  • 列表的表示方式:
    • 列表是容器型数据类型;
    • 将[]作为容器的标志,里面多个元素用逗号隔开[元素1, 元素2, 元素3, …]
  • 列表的特点:
    • 列表是可变的(元素的个数、值、顺序可变) - 增、删、改
    • 列表是有序的 - 支持下标操作
  • 列表对元素的要求:
    • 没有要求(不管什么类型的数据都可以作为列表的元素)

容器的基本特征:一个容器型的数据可以同时保存多个其他的数据

元素:容器中每一个独立的数据就是一个元素

列表中可以同时保存多个数据,也可也同时保存不同类型的数据

list3 = [89, 90, 76, 99, 58]
list4 = ['DuYS', 0.2, 18, True, [1, 'abc']]

2. 查 - 获取元素

  • 获取单个元素

    语法:列表[下标]
    说明:
    列表 - 任何结果是列表的表达式, 比如:保存列表的变量、具体的列表值等
    [] - 固定写法
    下标 - 下标又叫索引, 是元素在有序序列中位置信息

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

    注意:下标不能越界

  • 遍历

    语法:

    for 变量 in 列表:
    循环体

3. 增 - 添加元素

  • 添加单个元素

    列表.append(元素) - 在列表的最后添加一个元素
    列表.insert(下标, 元素) - 在指定下标对应的元素前插入指定元素

  • 批量添加

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

4. 切片 - 获取部分元素

​ 切片的结果是列表

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

  • 说明:

    • 开始下标 - 下标值(0开始的和-1开始的都行); 确定切片有效范围的起点, 可以取到
    • 结束下标 - 下标值(0开始的和-1开始的都行); 确定切片有效范围的终点, 不可取到
    • 步长
      • 1)决定切片的方向(步长对应的方向应该必须和开始到结束的方向一致,否则切片结果为空)
      • 2)决定获取元素的方式(一个一个的取还是跳着取)
  • 注: 切片的有效范围是:[开始下标, 结束下标)

    games = ['王者荣耀', '和平精英', '生化危机', '原神', '诛仙', '穿越火线', '部落冲突', '红警', '魂斗罗']
    games1 = games[1:5:1]   # ['和平精英', '生化危机', '原神', '诛仙']
    print(games1)
    print(games[1:-1:1])    # ['和平精英', '生化危机', '原神', '诛仙', '穿越火线', '部落冲突', '红警']
    print(games[3:-1:-1])   # []
    print(games[-1:-5:1])   # []
    print(games[0:-3:2])    # ['王者荣耀', '生化危机', '诛仙']
    print(games[-1:2:-2])   # ['魂斗罗', '部落冲突', '诛仙']
    print(games[2:-1:1])    # ['生化危机', '原神', '诛仙', '穿越火线', '部落冲突', '红警']
    
  • 省略步长:列表[开始下标:结束下标]; 省略步长,步长默认为

    print(games[2:-2])     # ['生化危机', '原神', '诛仙', '穿越火线', '部落冲突']
    
  • 省略开始下标:列表[:结束下标:步长] / 列表[:结束下标];省略开始下标,如果步长为正,从第一个元素开始往后取;如果步长为负,从最后一个元素开始往前取。

    print(games[:-3])       # ['王者荣耀', '和平精英', '生化危机', '原神', '诛仙', '穿越火线']
    print(games[:3:-1])     # ['魂斗罗', '红警', '部落冲突', '穿越火线', '诛仙']
    
  • 省略结束下标: 列表[开始下标::步长] / 列表[开始下标:]; 省略结束下标: 如果步长为正,从开始下标开始取最后一个元素;如果步长为负,从开始下标开始取到第一个元素

    print(games[1:])        # ['和平精英', '生化危机', '原神', '诛仙', '穿越火线', '部落冲突', '红警', '魂斗罗']
    print(games[3::2])      # ['原神', '穿越火线', '红警']
    print(games[-2::-1])    # ['红警', '部落冲突', '穿越火线', '诛仙', '原神', '生化危机', '和平精英', '王者荣耀']
    
  • 一起省:列表[::步长] / 列表[] - 有效范围为整个列表

print('abcdef'[1:])     # ['bcdef']

5. 删、改

  • 删 - 删除列表元素(让列表元素的个数减少)

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

      • 注:不能越界,否则会报错
    • 列表.remove(元素)

      • a. 元素不存在 - 报错
      • 元素有多个 - 只删第一个
    • 列表.pop() - 取出列表中最后一个元素

      • 列表.pop(下标) - 取出列表中指定下标对应的元素
    • 列表.clear()

      teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
      teleplays.clear()   # 储存地址没变  (效率更高)
      print(teleplays)
      
      teleplays = ['琅琊榜', '大秦', '回家的诱惑', '康熙王朝', '破产姐妹', '亮剑', '生活大爆炸', '西游记']
      teleplays = []      # 储存地址变了
      print(teleplays)
      
  • 改 - 修改元素的值

    • 列表[下标] = 值 - 将列表中指定下标对应的元素修改成指定的值
    # 练习1:将低于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)
    
    # 练习2:删除列表中低于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]
        else:
            i += 1
    print(scores)
    
    
    scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
    for i in game[::-1]:
    	if i < 60:
    		scores.remove(i)
    print(scores)
    

6. 列表的相关操作

  • 数学运算符 : + 、 *
    • 列表1 + 列表2 - 讲列表1和列表2 合并成一个新的列表
    • 列表1 * N / N * 列表1 - 将N个列表1合并产生一个新的列表
  • 比较运算符: == 、!= 、> 、< 、<= 、>=
    • == 、 !=
    • 列表1 >(<、>=、<=) 列表2
      • 比较大小的原理:比较第一对不同元素的大小
      • 下标相同的元素为一对
    • in 和 not in
      • 元素 in 列表 - 判断列表中是否存在指定元素
      • 元素 not in 列表 - 判断列表中是否不存在指定元素

7. 列表的相关方法:

​ copy, count, index, reverse, sort

  • 列表.count(元素) - 统计列表中指定元素的个数
  • 列表.index(元素) - 获取元素第一次出现在列表中的下标(0开始的下标值)
  • 列表.reverse() - 倒叙
  • 列表.sort() - 将列表中的元素从小到大排序
    • 列表.sort(reverse=True) - 将列表中的元素从大到小排序
  • 列表.copy() - 赋值列表产生一个元素一模一样的新列表
    • 注:保存地址与原来不一样

8. 练习题

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

nums = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]

if len(nums) % 2:
    print('列表共有', len(nums), '个元素,中心元素为:', nums[len(nums) // 2])
else:
    print('列表共有', len(nums), '个元素,中心元素为:', nums[len(nums) // 2 - 1], nums[len(nums) // 2])

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

nums = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
nums_sum = 0
for i in nums:
    nums_sum += i
print('所有的元素和为:', nums_sum)

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

nums = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
print('奇数下标元素有:')
for index, item in enumerate(nums):
    if index % 2:
        print(item, end=' ')

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

nums = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
print('值为奇数的元素有:')
for item in nums:
    if item % 2:
        print(item, end=' ')

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

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

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

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

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

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

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

scores = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
scores.remove(max(scores))
scores.remove(min(scores))
scores_sum = 0
for item in scores:
    scores_sum += item
print('平均分为:', scores_sum / len(scores))

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

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

list_1 = [1, 'a', 4, 90]
list_2 = ['a', 8, 'j', 1]
list_end = []
for item in list_1:
    if item in list_2:
        list_end.append(item)
print(list_end)

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

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

nums = [90, 45, 56, 89, 76, 56, 92, 45, 30, 59, 67, 70]
nums.sort()
print('列表的最大值为:', nums[-1])

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]
nums_2 = []
max_count = 0
value = 0
for item in nums:
    if item not in nums_2:
        nums_2.append(item)
for item in nums_2:
    if nums.count(item) > max_count:
        max_count = nums.count(item)
        value = item
print(value)

# 方法二
nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3]
value = 0
max_count = 0
for item in nums:
    count = 0
    while item in nums:
        count += 1
        nums.remove(item)
    if count >= max_count:
        max_count = count
        value = item
print(value)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值