慕课北京大学陈斌老师python课 学习笔记
个人学习记录,如有错误欢迎指正。
数据类型
陈斌老师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)区别
-
ls.reverse()与ls.sort() 无返回值,直接改变原列表
若print(ls.reverse()) 返回 None
可以先ls.reverse() 再 print(ls) -
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