【千锋Python2205班8.26笔记-day05-列表】

01-homework

1.已知一个数字列表,求列表中心元素。例如:[1,2,3] -> 2;[1,2,3,4] -> 2,3

numList = [1, 2, 3]
numList = [1, 2, 3, 4]
length = len(numList)
if length % 2 == 0:
    left = length // 2 - 1
    right = length // 2
    print(numList[left], numList[right])
else:
    print(numList[length // 2])

2.不使用sum方法,已知一个数字列表,求所有元素的和。

numSum = 0
numList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in numList:
    numSum += i
print(numSum)

print(sum(numList))

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

numList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in range(len(numList)):
    if i % 2 != 0:
        print(numList[i])

4.已知一个数字列表,在原列表基础上将所有元素乘二。
例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]

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

5.有两个列表A和B,使用列表C来获取两个列表中公共的元素。
例如: A = [1, ‘a’, 4, 90] B = [‘a’, 8, ‘j’, 1] --> C = [1, ‘a’]

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

6.有一个数字列表,获取这个列表中的最大值.
(注意: 不能使用max函数)。
例如: nums = [19, 89, 90, 600, 1] —> 600

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

7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分) ,
score = [10,20,50,70,99,80,45,30]

score = [10, 20, 50, 70, 99, 80, 45, 30]
max_ = score[0]
min_ = score[0]
for i in score:
    if i > max_:
        max_ = i
    # elif i < min_:
    #     min_ = i
    if i < min_:
        min_ = i
score.remove(max_)
score.remove(min_)
print(round(sum(score) / len(score), 1))

8.数字组合:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

numCount = 0
for i in range(1, 5):
    for j in range(1, 5):
        for x in range(1, 5):
            if i != j and i != x and j != x:
                print(i * 100 + j * 10 + x)
                numCount += 1
print(f'一共有{numCount}个')

9.如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。请找出1000以内所有的阿姆斯特朗数:
例如:1 ^ 1 = 1、2 ^ 1 = 2、1 ^ 3 + 5 ^3 + 3 ^3 = 153等。

for i in range(1, 1001):
    iCopy = i
    iCopy_1 = i
    length = 1
    while iCopy // 10 != 0:
        iCopy //= 10
        length += 1
    numSum = 0
    while True:
        numSum += (i % 10) ** length
        i //= 10
        if i == 0:
            break
    if numSum == iCopy_1:
        print(f'{iCopy_1}是阿姆斯特朗数')

02-review

1.循环:break、continue

2.for-else语句:当所有的情况考虑完才能下某个结论时使用for-else语句。
注意:
for循环正常结束时,else语句执行;for循环非正常结束时else语句不执行。

3.列表:列表的性质:列表是可变的,列表是有序的。列表中元素可以是任意数据类型,并且是可以重复的。

4.拼接、重复

5.循环(直接遍历、间接遍历)

6.列表的增删改(append、insert、extend;del、remove、pop、clear)

03-列表相关方法

numlist = [12, 13, 14, 15, 16, 90]

1.sum:计算数字列表中所有元素的和

print(sum(numlist))

2.max\min:求数字列表中最大或最小值
numlist = [12, 13, 14, 15, 16, 90]

print(max(numlist))
print(min(numlist))

3.count:统计某个元素在列表中出现的次数

numlist = [12, 13, 14, 15, 16, 90]
print(numlist.count(1))

4.sort:默认将列表从小到大排序,直接修改列表本身,sort返回值为空值

numList1 = [10, 30, 0, 100, 5, -100]
print('sort', numList1.sort())
print('sort', numList1)

5.sorted:默认将列表从小到大排序,sorted不修改列表本身,返回排好序的列表结果

numList1 = [10, 30, 0, 100, 5, -100]
print('sorted', sorted(numList1))
print('sorted', numList1)

5.reverse:将列表倒序输出,直接修改列表本身,返回值是None

numList1 = [10, 30, 0, 100, 5, -100]
print('reverse', numList1.reverse())
print('reverse', numList1)

6.切片将列表倒序

numList1 = [10, 30, 0, 100, 5, -100]
print(numList1[::-1])

7.index:查找某个元素出现的位置,从左向右找,找到此元素第一次出现的位置后直接停止查找

list1 = ['abcd', 1, 2, 3, 4, 1]
print(list1.index(1))

8.index还可以直接执行从哪个位置开始查找

list1 = ['abcd', 1, 2, 3, 4, 1]
print(list1.index(1, list1.index(1) + 1))

思考:如果从list1中查找第二个1出现的位置?
1.先查找第一个1的位置

numIndex = list1.index(1)

2.将没有第一个1的列表切出来

list2 = list1[numIndex + 1:]

3.找新列表中的第一个1(相当于原列表中的第二个1),再将去掉的部分长度补回来

print(list2.index(1) + len(list1[:numIndex + 1]))

练习:
1.获取列表中出现次数最多的元素。
例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3],打印[3];nums = [1,2,2,1,3],打印[1,2]

#nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3]
nums = [1, 2, 2, 1, 3]
#numCount判断次数
numCount = 0
#list1存放出现次数最大的元素
list1 = []
#对所有元素遍历
for i in nums:
    # 判断此元素的最大次数是不是大于原来的最大次数
    # if分支判断列表中单一元素出现次数最大
    if nums.count(i) > numCount:
        # 条件成立重新给numCount赋值
        numCount = nums.count(i)
        # 清空列表再添加元素
        list1.clear()
        list1.append(i)
    # elif分支判断多个元素同时出现次数最大
    elif nums.count(i) == numCount:
        # 将所有情况考虑完在判断本元素是否添加过
        for x in list1:
            if i == x:
                break
        else:
            list1.append(i)
print(list1)

04-列表补充

1.成员运算:in、not in

判断某个元素在不在容器中

list1 = [1, 2, 3, 'abc', [1, 2, 3]]
print(1 in list1)
print([3] not in list1)

练习1:
获取列表中出现次数最多的元素。
例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3],打印[3];nums = [1,2,2,1,3],打印[1,2]

#nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3]
nums = [1, 2, 2, 1, 3]
#numCount判断次数
numCount = 0
#list1存放出现次数最大的元素
list1 = []
#对所有元素遍历
for i in nums:
    # 判断此元素的最大次数是不是大于原来的最大次数
    # if分支判断列表中单一元素出现次数最大
    if nums.count(i) > numCount:
        # 条件成立重新给numCount赋值
        numCount = nums.count(i)
        # 清空列表再添加元素
        list1.clear()
        list1.append(i)
    # elif分支判断多个元素同时出现次数最大
    elif nums.count(i) == numCount and i not in list1:
        list1.append(i)
print(list1)

1.列表的比较大小

有序容器比较大小要求:
a.两个容器的数据类型保持一致。
b.比较的是第一对不相同元素的大小,并且这两个元素的数据类型要一致
c.两个有序容器找不到第一对不相同元素,谁长谁大

list2 = [1, 2, 4, [1, 2, 4]]
list3 = [1, 2, 4, [1, 2, 3]]
print(list3 > list2)

练习2:

print([3] > [1, 2, 3])  # True
print([123] > [213])  # False
print([3] > [3, 2, 1])  # False

05-如何删除列表中重复元素

举例:
name_list = [‘张三’, ‘李四’, ‘王五’, ‘李四’, ‘王五’, ‘王五’, ‘张三’],要求结果:[‘张三’,‘李四’,‘王五’]

count = 0
for i in name_list:
    count += 1
    if name_list.count(i) > 1:
        # print(f'{i}是重复的')
        name_list.remove(i)
print(name_list)
print(count)

结果是[‘李四’, ‘李四’, ‘王五’, ‘张三’],for循环只执行了4次

1.间接删除

name_list = ['张三', '李四', '王五', '李四', '王五', '王五', '张三']
names = []
for i in name_list:
    if i not in names:
        names.append(i)
print(names)

2.控制下标

name_list = ['张三', '李四', '王五', '李四', '王五', '王五', '张三']
index_ = 0
while index_ < len(name_list):
    if name_list.count(name_list[index_]) > 1:
        del name_list[index_]
    else:
        index_ += 1
print(name_list)

3.倒着删除

name_list = ['张三', '李四', '王五', '李四', '王五', '王五', '张三']
for i in range(len(name_list) - 1, -1, -1):
    if name_list.count(name_list[i]) > 1:
        del name_list[i]
print(name_list)

06-列表推导式

1.作用:在创建列表时同时向列表中添加元素。

2.意义:

(1).简化代码,提高代码的可读性。

(2).在某些场景下可以使用列表推导式代替append。

三、性能比较:列表推导式性能 > append

四、列表推导式的三种语法

语法一:[表达式 for 变量 in 容器]

注意:
表达式就是向列表中添加的元素

numList = []
for i in range(1, 101):
    numList.append(i)
print(numList)

列表推导式

numList_2 = [i for i in range(1, 101)]
print(numList_2)

语法二:[表达式 for 变量 in 容器 if 条件]

注意:
for循环执行一次,如果条件成立,表达式的结果添加到列表中

numList3 = [i for i in range(0, 101) if i % 5 == 0]
print(numList3)

语法三:[表达式 for 变量1 in 容器1 for 变量2 in 容器2]

注意:
第一个for循环执行1次,第二个for循环执行N次,第二个for循环每执行一次,表达式的结果就向列表中添加一次。

list1 = [f'{index} * {column} = {index * column}' for index in range(1, 10) for column in range(1, index + 1)]
print(list1)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里提供一个使用Python的matplotlib库来绘制中国儿童出生率与死亡率的折线图和柱状图的例子: ```python import matplotlib.pyplot as plt import numpy as np # 数据 years = np.arange(1950, 2021) birth_rate = [24.32, 37.37, 45.01, 43.21, 35.89, 22.07, 21.04, 18.23, 21.03, 22.77, 23.06, 22.17, 22.88, 18.05, 18.39, 20.80, 17.20, 17.97, 17.31, 21.93, 24.70, 25.90, 19.41, 16.55, 13.38, 12.42, 13.68, 18.16, 23.43, 25.83, 27.10, 30.31, 31.14, 32.45, 33.69, 35.89, 37.52, 38.14, 39.64, 39.14, 34.99, 30.75, 28.28, 26.75, 26.18, 20.29, 15.49, 12.42, 12.21, 12.08, 11.93, 11.96, 12.07, 11.93, 11.93, 11.49, 10.94, 10.06, 9.89, 9.51, 8.98, 8.17, 7.90, 7.96, 7.92, 7.82, 7.60, 7.18, 6.69, 6.01, 5.79, 5.53, 5.05, 4.67, 4.08, 3.65, 3.58, 3.11, 2.81, 2.68, 2.49, 2.14, 1.71, 1.56, 1.45, 1.29, 1.22, 1.15, 1.10, 0.94] death_rate = [30.92, 30.14, 26.77, 23.87, 22.19, 20.46, 19.30, 18.39, 17.50, 16.73, 15.66, 14.84, 14.00, 13.65, 13.01, 12.32, 11.72, 11.10, 10.55, 10.06, 9.65, 9.36, 9.09, 8.79, 8.53, 8.26, 8.02, 7.79, 7.56, 7.37, 7.17, 6.99, 6.81, 6.63, 6.45, 6.28, 6.12, 5.96, 5.81, 5.67, 5.54, 5.41, 5.29, 5.18, 5.07, 4.96, 4.86, 4.77, 4.68, 4.59, 4.51, 4.43, 4.35, 4.27, 4.20, 4.13, 4.06, 3.99, 3.93, 3.87, 3.81, 3.75, 3.69, 3.63, 3.57, 3.52, 3.47, 3.42, 3.37, 3.32, 3.27, 3.23, 3.19, 3.14, 3.10, 3.06, 3.02, 2.99, 2.95, 2.92, 2.88, 2.85, 2.82, 2.79, 2.76, 2.73, 2.71, 2.68, 2.65] # 折线图 plt.plot(years, birth_rate, label='Birth rate') plt.plot(years, death_rate, label='Death rate') plt.xlabel('Year') plt.ylabel('Rate') plt.title('China Birth and Death Rate') plt.legend() plt.show() # 柱状图 width = 0.4 plt.bar(years - width / 2, birth_rate, width, label='Birth rate') plt.bar(years + width / 2, death_rate, width, label='Death rate') plt.xlabel('Year') plt.ylabel('Rate') plt.title('China Birth and Death Rate') plt.legend() plt.show() ``` 这个例子将中国1950年到2020年的出生率和死亡率数据存储在两个列表中。使用matplotlib库的`plot`函数和`bar`函数分别绘制折线图和柱状图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值