容器型数据类型(序列)

变量从是否是容器分为:非容器性数据类型和容器性数据类型的变量

非容器性数据类型的容器 一个盒子里面只有一个各格子,所以同一时间只能保存一个数据。例如:int、float、bool、None等。

容器型数据类型的容量 一个盒子里面有多个格子,每个格子可以存储不一样的数据,所以同一时间就可以保存多个数据。例如:list、dict、tutlp、set、str等

列表(list)

列表是容器性数据类型,是将中括号[]作为容器标志,里面多个元素用逗号隔开:[元素1,元素2,元素3,元素4,…]

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

  • 列表是可变的(可变是指元素的个数、值和顺序可变 - 支持增删改);列表有序(支持下标操作)
  • 列表中元素:任何类型的数据都可以作为列表的元素。
  • 同一个列表中的元素可以是不同类型的数据
获取(查)单个元素

语法1:列表[下标]

说明:
列表 - 任何结果是列表的表达式,例如:保存列表的变量或者具体的列表数据
[] - 固定写法
下标 - 下标是有序序列中元素的位置。python中有序序列中元素的下标有两种:
第一种:从前往后从 0 开始一次增加
第二种:从后往前从 -1 开始一次减少

注意:如果需要获取的下标超了出列表中的元素下标,则报错(IndexError: list index out of range)

切片 – 获取部分元素

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

  1. 确定是否可以获取数据:从开始下标到结束下标的方向如果和步长对应的方向(步长为正表示从前往后,步长为负表示从后往前)一致就可以获取数据
  2. 确定有效范围:开始下标对应元素可以取到,结束下标对应的元素取不到 --> [开始下标, 结束下标)
  3. 确定切片结果:在有效范围内按照步长绝对值取数据;绝对值为1就一个一个的取,绝对值为n(n>0)就跳n个取

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

语法3:(省略开始下标)
列表[:结束下标:步长] 或 列表[:结束下标]

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

语法4:(省略结束下标)
列表[开始下标::步长] 或 列表[开始下标:]

如果步长为正,从开始下标开始从前往后取完为止;如果步长为负,从开始下标开始从后往前取完

遍历 – 一个一个全部取出来

方法一:直接获取元素

for 变量 in 列表:
    循环体

变量一次获取的就是列表中的每个元素

方法二:通过获取每个元素的下标来获取元素

for 变量 in range(列表长度):
    循环体

变量依次获取的时候列表中元素的下标

补充: len(列表) - 获取列表的长度

增 – 添加元素
  1. 列表.append(元素) - 将元素添加到列表的最后(即追加)
  2. 列表.insert(下标,元素) - 将元素插入到指定下标前
删 – 删除元素
  1. del 列表[下标] – 删除指定下标对应的元素
  2. 列表.remove(元素) – 删除指定元素
    如果元素不存在,则报错(ValueError: list.remove(x): x not in list)
    如果元素有多个,只删最前面的一个
  3. 列表.pop() – 取出最后一个元素,并且返回
    列表.pop(下标) – 取出指定下标对应的元素,并且返回
改 – 替换元素

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

in
  1. 元素 in 列表 – 判断列表是否存在指定的元素
  2. 元素 not in 列表 – 判断列表中是否不存在指定元素


练习
  1. scores = [45, 69, 87, 68, 95, 68, 58]保存所以学生的分数
    (1) 统计不及格人数
    (2) 计算学生平均分
scores = [45, 69, 87, 68, 95, 68, 58]
count = 0
sum = 0
for i in scores:
    sum += i
    if i < 60:
        count += 1
print("不及格人数:", count, "平均分:", sum / len(scores))
  1. 已知列表nums=[90, 1.23, ‘hello’, 60, 5.3],统计nums中整数的个数
nums = [90, 1.23, 'hello', 60, 5.3]
count = 0
for i in nums:
    if type(i) == int:
        count += 1
print("整数的个数:", count)


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

lists = [56, 98, 63, 56, 87, 98, 36, 89]
for i in range(len(lists)):
    if len(lists) % 2 == 0:
        index = len(lists) // 2
        print("中心元素:", lists[index-1], lists[index])
    else:
        index = len(lists) // 2
        print("中心元素:", lists[index])

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

lists = [56, 98, 63, 56, 87, 98, 36, 89]
sum = 0
for i in lists:
    sum += i
print("所有元素和:", sum)

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

lists = [56, 98, 63, 56, 87, 98, 36, 89]
print("奇数下标的元素有:", lists[1::2])

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

lists = [56, 98, 63, 56, 87, 98, 36, 89]
for i in lists:
    if i % 2 != 0:
        print("值为奇数的元素:", i)

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

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

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

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

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

names = ['张三', '李四', '大黄', '大黄', '张三', '张三', '张三', '王五', '孙六']
i = 0
while i < len(names):
    if names[i] in names[i+1:]:
        del names[i]
    else:
        i += 1
print(names)

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

scores = [96, 90, 91, 92, 96, 99]
total = 0
max_score = min_score = scores[0]
for i in scores:
    total += i
    if i > max_score:
        max_score = i
print((total - max_score - min_score) / len(scores) - 2)

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

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

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

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

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

nums = [19, 89, 90, 600, 1]
m = nums[0]
for i in nums[1:]:
    if i > m:
        m = i
print(m)

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