[Python] 慕课北京大学陈斌老师Python基础课2-7章 学习笔记

这篇笔记涵盖了北京大学陈斌老师的Python基础课程,重点讲解了数据类型的列表操作,如归并排序、字符串操作及列表元素的绝对值排序。此外,还介绍了计算与控制流的概念,包括阶乘求和、水仙花数、完数、素数的打印,以及最大公约数和最小公倍数的辗转相除与相减法。最后,提到了一些基本扩展模块中的问题,如分形数、约瑟夫环问题等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


个人学习记录,如有错误欢迎指正。

数据类型

陈斌老师python课

列表归并排序

def merge_sort(lst):
    if len(lst) <= 1:
        return lst
    middle = int(len(lst) / 2)
    left = merge_sort(lst[:middle])
    right = merge_sort(lst[middle:])
    merged = []
    while left and right:
        merged.append(left.pop(0) if left[0] <= right[0] else right.pop(0))
        # left.pop(0)是提取left的第0个元素并更新left
        # 将left与right中第0位上最小的元素提取出来加到merged中
        # 若right的更小,则right的第0位被提取,下一次比较的是right的第1位和left的第0位
    merged.extend(left if left else right)
    # extend与append都是将元素添加到merged中,添加一个元素无差别
    # 若添加的为列表或元组,extend是添加列表的元素,而append是将其作为一个整体添加上
    # 在此只能用extend
    return merged


data_lst = [6, 202, 100, 301, 38, 8, 1]
print(merge_sort(data_lst))

字符串操作

s = ‘abcdefg123456’
要获得 ‘54321’

s[::-1][0:5]  # 先反转载取5个字符
s[-1:6:-1]
s[-1:-6:-1]  # 6和-6都是g,不包含g
# 步长为-1时,是从右向左取
# 故s[0:5:-1]的结果为'’(空字符串)因为它根本就没切到字符

ls.reverse()与reversed(ls)区别

  1. ls.reverse()与ls.sort() 无返回值,直接改变原列表
    若print(ls.reverse()) 返回 None
    可以先ls.reverse() 再 print(ls)

  2. reversed()与sorted()不改变原列表,有返回值
    reversed()返回一个反转的迭代器,不是列表
    sorted()返回列表

列表元素绝对值排序

输入一个列表,要求列表中的每个元素都为整数;

将列表中的所有元素按照它们的绝对值大小进行排序,绝对值相同的还保持原来的相对位置,打印排序后的列表(绝对值大小仅作为排序依据,打印出的列表中元素仍为原列表中的元素).

输入:-2 1 3
输出:[1, -2, 3]

a_list = list(map(int, input().split()))
print(sorted(a_list, key=abs))

计算与控制流

阶乘求和

给定任意正整数n,计算 1 ! + 2 ! + 3 ! + . . . + n ! 1!+2!+3!+...+n! 1!+2!+3!+...+n!的值。

解法有很多,可参考Python花式编程:6种方法计算1!+2!+…+n!.

在此列举两个:

n = int(input())
t, s = 1, 0
for i in range(1, n+1):
    t = t*i  # 不断更新t
    s += t  # 下个数的阶乘只需要在上个t的基础上再乘以此数即可
print(s)

此方法时间最少。

还可使用math库中求阶乘的函数factorial.

from math import factorial
n = int(input())
s = sum(map(factorial, range(1, n+1)))
print(s)

英文对应阿拉伯数字

给定一个英文数字字符串,打印相应阿拉伯数字字符串。
输入:one-four-five-nine
输出:1459

 str
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值