Python学习笔记:06 容器型数据类型------列表

06 容器型数据类型------列表

容器型数据类型

容器型数据类型:用一个变量可以保存多个数据的数据类型,包括列表(list)元组(tuple)集合(set)字典(dict)

列表

  • 列表是python提供的一种容器型数据类型;以[]作为容器的标志,里面多个元素用逗号隔开:[元素1, 元素2, 元素3, …]。
  • 列表是可变的(元素个数、元素的值可变),元素支持增、删、改、查操作。
  • 列表是有序的、支持下标操作。

列表元素

  • 列表中的元素可以是任何类型的数据;同一列表中元素的类型可以不一样。
  • 列表的增、删、查、改、切片操作。
  • 列表的运算(拼接、重复、成员、索引、切片、比较)。
  • 列表元素的循环遍历。
  • 列表的统计、排序方法。
  • 列表的生成式(推导式)语法。

列表元素的添加与删除

"""
example01 - 容器型数据类型(用一个变量可以保存多个数据)---列表
Author: yucui
Date: 2021/7/23
"""
list1 = []             # 空列表
print(list1)
nums = [10, 100, 1000, ]
print(nums)
print(type(nums))
li = [1, 'hello', '学习', True, 3.2, 'hello']    # 列表元素类型可以不一样
print(li)
print(type(li))
nums.append(10000)     # 在列表尾部追加数据
print(nums)
nums.insert(1, 15)     # 指定位置插入
print(nums)
get_num = nums.pop()   # 取出最后一个元素,列表中会删除这个元素,但是这个值仍然存在
print(get_num, nums)
li.remove('hello')     # 删除指定元素
print(li)
del li[2]              # 删除指定下标对应的元素
print(li)
# 清空列表元素
li.clear()
print(li)

说明:列表元素添加方法有两种:一种是使用列表.append()函数在列表尾部追加数据;另一种是使用列表.insert()函数在指定位置插入,列表.insert()函数有两个参数,第一个参数是下标,第二个参数是要插入的值,表示在指定下标前插入指定元素。列表的删除方法有三种,一种是使用列表.pop(),表示取出最后一个元素,这个元素还存在,但是列表中删除了这个元素;一种是使用列表.remove(),可以删除指定元素值的元素;还有一种是del函数,可以删除指定下标对应的元素。清空列表元素可以使用列表.clear()

运行结果如下:

[]
[10, 100, 1000]
<class 'list'>
[1, 'hello', '学习', True, 3.2, 'hello']
<class 'list'>
[10, 100, 1000, 10000]
[10, 15, 100, 1000, 10000]
10000 [10, 15, 100, 1000]
1 ['hello', '学习', True, 3.2, 'hello']
['学习', True, 3.2, 'hello']
['学习', True, 'hello']
[]

列表的切片操作

"""
example05 - 列表的切片操作
切片语法 ---> list_obj[start:end:step]
Author: yucui
Date: 2021/7/26
"""

nums = [35, 12, 54, 90, 37, 45, 23, 35]
print(nums[2:])        # 取到从第三个元素到最后一个元素
print(nums[:])         # 取到所有元素
print(nums[::-1])      # 从最后一个元素往前取(反转列表)
print(nums[1:3])       # 取到第二个、第三个
print(nums[2:6:2])     # 从第三个开始到第7个,每隔一个取一个
# print(nums[10])      # 下标越界,会报错
print(nums[10:15])     # 产生空列表,不会报错
print(nums[5:1])       # 产生空列表,不会报错

运行结果:

[54, 90, 37, 45, 23, 35]
[35, 12, 54, 90, 37, 45, 23, 35]
[35, 23, 45, 37, 90, 54, 12, 35]
[12, 54]
[54, 37]
[]
[]

列表的遍历

"""
example02 - 列表的遍历
索引运算(下标运算) - 通过正向或负向获取列表的值
Author: yucui
Date: 2021/7/23
"""

nums = [35, 98, 12, 27, 66]

print(nums[2], nums[-3])      # 根据下标取值
nums[1] = 50                  # 修改指定元素的值
print(nums)

for num in nums:               # 只能读列表元素
    print(num, end=' ')
print()
for i in range(len(nums)):     # 既能读元素,也能通过下标修改元素
    nums[i] += 10
    print(nums[i], end=' ')

print()
for index, num in enumerate(nums):      # 可以取两个值,索引值和元素
    print(index, num)

说明:每个元素都对应两个下标,一个正的下标,一个负的下标,正的从前往后,从0到列表长度减一,负的从后往前,从-1到负的列表长度,查找元素时,可以根据元素下标获取元素的值。列表的遍历有两种形式,一种是直接遍历,但是这种遍历方式比较局限,只能读取,不能修改元素的值,而通过遍历下标来遍历列表就比较方便,既可以读取元素,还可以修改元素的值。枚举函数enumerate()函数既可以取到元素,也可以取到元素的下标值。

运行结果如下:

12 12
[35, 50, 12, 27, 66]
35 50 12 27 66 
45 60 22 37 76 
0 45
1 60
2 22
3 37
4 76

列表的统计方法

"""
example03 - 输入10个整数,计算平均值、方差,找出最大值、最小值
Author: yucui
Date: 2021/7/23
"""
nums = []
for _ in range(10):
    num = int(input('请输入:'))
    nums.append(num)
print(nums)
max_num = max(nums)
min_num = min(nums)
average = sum(nums) / len(nums)

total = 0
for i in range(len(nums)):
    total += (nums[i] - average) ** 2
variance = total / (len(nums) - 1)           # 方差
print(f'平均值:{average},方差:{variance},最大值:{max_num},最小值:{min_num}')

说明:可以使用sum()函数对列表元素求和。

​ 使用max()函数求出列表元素中最大的值。

​ 使用min()函数求列表中最小的值。

​ 使用len()函数求列表的长度。

列表的生成式(推导式语法)

"""
example04 - 列表的生成式(推导式语法)
Author: yucui
Date: 2021/7/26
"""

nums = [i for i in range(1, 11)]
print(nums)

运行结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

列表的运算

"""
example06 - 列表的运算
Author: yucui
Date: 2021/7/26
"""

list1 = ['apple', 'pear', 'orange', 'strawberry', 'apple']    # 创建列表的方式一:字面量语法
print(list1)
list2 = list(range(1, 11))                           # 创建列表的方式二:构造器语法
print(list2)
list3 = [i ** 2 for i in range(1, 11)]               # 创建列表的方式三:生成式(推导式)语法
print(list3)

# count() ---> 计算元素出现次数
print(list1.count('apple'))

# index() ---> 查找元素位置
print(list1.index('pear'))
print(list1.index('apple'))
print(list1.index('apple', 1))     # 从下标1开始找,找到的是第二个apple的下标

# 获取列表元素的个数
print(len(list1))
print(len(list2))

# 和列表相关的运算
# 重复运算
list4 = [1, 10, 100] * 5
print(list4)

# 成员运算
print(10 in list4)
print(5 in list4)
print(5 not in list4)

# 索引和切片
# 正向索引:0 ~ n - 1 / 负向索引:-n ~ -1
# 索引运算
print(list1[0])
print(list1[-1])

# 切片运算
print(list2[1:5])
print(list2[:])
print(list2[::2])
print(list2[-1:-5:-1])
print(list2[-5:-1])

# 合并
list5 = [1, 3, 5, 7]
list6 = [4, 4, 8]
temp = list5 + list6
print(temp)

# 比较
list7 = list(range(1, 8, 2))
list8 = [1, 3, 5, 7, 9]
list9 = [1, 3, 5, 9]
# 比较两个列表元素是否一一相等
print(list5 == list7)
print(list7 == list8)

# 比较两个列表对应元素大小
print(list7 > list8)
print(list8 > list9)

运行结果:

['apple', 'pear', 'orange', 'strawberry', 'apple']
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2
1
0
4
5
10
[1, 10, 100, 1, 10, 100, 1, 10, 100, 1, 10, 100, 1, 10, 100]
True
False
True
apple
apple
[2, 3, 4, 5]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 3, 5, 7, 9]
[10, 9, 8, 7]
[6, 7, 8, 9]
[1, 3, 5, 7, 4, 4, 8]
True
False
False
False

列表的反转和排序

"""
example07 - 列表的反转和排序
Author: yucui
Date: 2021/7/26
"""
# 列表的反转
items = [1, 15, 0, 25, 69]
items.reverse()
print(items)

# 列表的排序 默认为升序 修改reverse=True,排序方式为降序
items.sort(reverse=True)
print(items)

nums = ['1', '10', '234', '2', '35', '100']
nums.sort()
print(nums)
nums.sort(key=int)
print(nums)

运行结果:

[69, 25, 0, 15, 1]
[69, 25, 15, 1, 0]
['1', '10', '100', '2', '234', '35']
['1', '2', '10', '35', '100', '234']

课后练习

输入三个整数,按照从大到小顺序输出

"""
exersice1 - 输入三个整数,按照从大到小的顺序输出
Author: yucui
Date: 2021/7/24
"""
nums = []
for _ in range(3):
    num = int(input('请输入:'))
    nums.append(num)
sort_nums = sorted(nums, reverse=True)
for i in sort_nums:
    print(i, end=' ')

说明:python中的内置函数sorted()函数是一个排序函数,reverse参数值为True,表示降序排列

运行结果如下:

请输入:12
请输入:35
请输入:9
35 12 9 

向列表添加10个随机整数,找出其中第二大的元素

"""
exercise2 - 向列表中添加10个随机整数,找出其中第2大的元素
Author: yucui
Date: 2021/7/24
"""

import random
# 列表的生成式语法(推导式语法)
nums = [random.randrange(1, 101) for _ in range(10)]
max1, max2 = nums[0], nums[1]
if max1 < max2:
    max1, max2 = max2, max1
# 找到最大和第二大的元素
for i in range(3, len(nums)):
    if nums[i] > max1:
        max1, max2 = nums[i], max1
    # 如果最大的元素不止一个,就跳过不做处理,继续下一轮循环
    elif nums[i] == max1:
        continue
    elif nums[i] > max2:
        max2 = nums[i]
print(nums)
print(max2)

运行结果不唯一,因为是产生随机数进行排序,运行结果如下:

[66, 1, 66, 31, 8, 64, 71, 88, 44, 9]
71

21根火柴游戏:有21根火柴,人和计算机轮流拿,人先拿(输入拿几根)计算机后拿,每次至少1根最多4根,拿到最后一根火柴的算输,要确保计算机一定可以获胜!

"""
exercise3 - 21根火柴游戏
Author: yucui
Date: 2021/7/24
"""

total = 21
while total > 0:

    n = int(input('人取火柴(1-4)根:'))
    total -= n
    print(f'还剩{total}根')
    if total > 0:
        com_get = 5 - n
        total -= com_get
        print(f'计算机取{com_get}根,还剩{total}根')
print('人输了')

思路:一共21根火柴,要保证计算机赢,就得保证最后一根是人拿到,前面还有20根,在每一轮拿火柴时,人拿n根,计算机就拿5-n根,一共能进行4轮,这样就能保证最后一根是人拿到。

4 3 2 1 人
1 2 3 4 计算机
1 2 3 4 人
4 3 2 1 计算机
1 2 3 4 人
4 3 2 1 计算机
4 3 2 1 人
1 2 3 4 计算机
1 1 1 1 人

运行结果:

人取火柴(1-4)根:4
还剩17根
计算机取1根,还剩16根
人取火柴(1-4)根:3
还剩13根
计算机取2根,还剩11根
人取火柴(1-4)根:2
还剩9根
计算机取3根,还剩6根
人取火柴(1-4)根:2
还剩4根
计算机取3根,还剩1根
人取火柴(1-4)根:1
还剩0根
人输了
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

better meˇ:)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值