Part 1
task 1
任务1: 在 Python 中使用列表数据结构并向两个列表中分别输入表 1中的指数名称和收盘价。同时,在包含指数名称的列表中,依次访问“富时 100 指数”“沪深 300 指数”这两个元素;在包含收盘价的列表中,依次找出“15437.5100”“28458.4400”这两个元素的索引值。
#创建股票数据列表 s_names=['道琼斯工业平均指数','富时100指数','法兰克福DAX指数','巴黎CAC40指数','日经225指数','恒生指数', '沪深300指数'] s_price=[34207.8398,7018.0500,15437.5100,6386.4100,28317.8300,28458.4400,5134.1483] #查找索引 print(s_names.index('沪深300指数'),s_names.index('富时100指数'),s_price.index(15437.5100),s_price.index(28458.4400))
6 1 2 5
建立字典更方便。或者使用二位列表。
# 创建股票数据字典 stocks_price={'道琼斯工业平均指数':34207.8398,'富时100指数':7018.0500,'法兰克福DAX指数':15437.5100, '巴黎CAC40指数':6386.4100, '日经225指数':28317.8300,'恒生指数':28458.4400,'沪深300指数':5134.1483} stocks_price print(stocks_price['富时100指数'])
7018.05
task2
当完成任务1 以后,你突然发现遗漏了表2 中的 4 个重要股票指数,因此需要将表2中的这些新信息依次添加至任务1 已创建的两个列表中,并且新增的元素依次放置在列表的尾部。
在Python中对列表使用修改、添加、删除元素的操作的方法有 1.根据索引修改列表元素 2.添加元素可以使用append函数在列表末尾添加,也可以使用insert函数在指定位置添加 3.删除元素的方法:使用del语句删除元素(前提是知道元素的位置);使用pop函数从栈顶弹出元素,默认弹出末尾元素,也可以指定位置; 4.根据值删除元素(已知值的前提下)
#在末尾添加新的股票信息 s_names.append('多伦多综指') s_names.append('海峡时报指数') s_names.append('首尔综指') s_names.append('台湾加权指数') print(s_names) s_price.append(19527.1008) s_price.append(3117.8900) s_price.append(3156.4200) s_price.append(16302.0596) print(s_price)
['道琼斯工业平均指数', '富时100指数', '法兰克福DAX指数', '巴黎CAC40指数', '日经225指数', '恒生指数', '沪深300指数', '多伦多综指', '海峡时报指数', '首尔综指', '台湾加权指数'] [34207.8398, 7018.05, 15437.51, 6386.41, 28317.83, 28458.44, 5134.1483, 19527.1008, 3117.89, 3156.42, 16302.0596]
task3
任务3: 当完成任务 2 以后,B 公司出台针对“优势全球配置指数”的新编制指引,要求不再跟踪“法兰克福 DAX 指数”和“巴黎 CAC40 指数”,而改为跟踪“欧元区斯托克 50 指数”。对此,你需要在任务 2 的编程基础上,删除相应的指数名称与对应的收盘价,并且在两个列表中索引值均是 2 的位置分别插入“欧元区斯托克 50 指数”以及对应的收盘价 4025.7800 点。
#使用remove函数删除指定值 s_names.remove('法兰克福DAX指数') s_names.remove('巴黎CAC40指数') del s_price[2] del s_price[3] #insert s_names.insert(2,'欧元区斯托克50指数') s_price.insert(2,4025.7800) print(s_names) print(s_price)
['道琼斯工业平均指数', '富时100指数', '欧元区斯托克50指数', '日经225指数', '恒生指数', '沪深300指数', '多伦多综指', '海峡时报指数', '首尔综指', '台湾加权指数'] [34207.8398, 7018.05, 4025.78, 6386.41, 28458.44, 5134.1483, 19527.1008, 3117.89, 3156.42, 16302.0596]
task4
你希望查看指数的大小关系,因此需要针对包含收盘价的列表,将元素先由小到大排列,然后由大到小排列。最后,你因一时疏忽删除了收盘价列表中的全部元素。
#价格由小到大排序 s_price.sort() print(s_price) s_price.sort(reverse=True) print(s_price) s_price.clear() print(s_price)
[3117.89, 3156.42, 4025.78, 5134.1483, 6386.41, 7018.05, 16302.0596, 19527.1008, 28458.44, 34207.8398] [34207.8398, 28458.44, 19527.1008, 16302.0596, 7018.05, 6386.41, 5134.1483, 4025.78, 3156.42, 3117.89] []
part2
task1
运用 Python 中的 lambda 函数自定义一个计算变量样本的算术平均值的函数,并且运用该函数依次计算 2021 年 5 月 10 日至 28 日期间 3 个月期 Shibor 、 3 个月期美元 Libor 以及 3 个月期Euribor 的平均值。
注:在Python中lambda函数的结构为:
lambda [arg1 [,arg2,.....argn]]:expression 冒号:左边arg1~argn是传入参数,可以传入多个值,也可以添加默认值,跟正常函数一样,冒号:右边是expression,参数的表达式。表达式中出现的参数需要在:左边中有定义,注意: 表达式只能是单行
#使用def语句定义函数 def sum(arg1, arg2): total = arg1 + arg2 return total sum(10, 20)
30
使用lambda定义匿名函数 lambda arg1, arg2: arg1 + arg2 # arg1, arg2可以传入默认值 调用lambda函数的方法 1.赋值法; 2.把lambda用括号括起来,在后面写上参数 3.作为参数传入其他函数 4.lambda函数作为返回值
#1.通过赋值调用lambda函数 #例如计算字符串单词数量 f=lambda str:len(str.split()) f=('Marx') #2.加括号 (lambda str:len(str.split()))('hello world') #3.作为参数传入其他函数 #例如 list=['marx','hello world','jupyter'] list.sort(key=lambda str:len(str.split())) #4.lambda函数作为返回值 def f(a,b,c): return lambda x:a*x**2+b*x+c g=f(3,2,1) g(3)
34
使用map函数进行科学计算,结合map和lambda函数进行科学计算 map函数语法结构为:
def square(x) : # 计算平方数 return x ** 2 map(square, [1,2,3,4,5]) # 计算列表各个元素的平方 [1, 4, 9, 16, 25] map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数 [1, 4, 9, 16, 25] # 提供了两个列表,对相同位置的列表数据进行相加 map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]) [3, 7, 11, 15, 19]
#解题 #创建列表 shibor_3m=[0.02542,0.02536,0.02532,0.02525,0.02521,0.02514,0.0251,0.02505,0.02497,0.02489,0.0249, 0.02485,0.02479,0.02474,0.02476] libor_3m=[0.001675,0.001603,0.0016541,0.001559,0.001551,0.001496,0.001553,0.001493,0.001501,0.00147, 0.001409,0.001385,0.00135,0.001346,0.001314] euribor_3m=[-0.005330,-0.005330,-0.005390,-0.005410,-0.005490,-0.005480,-0.005530,-0.005520,-0.005450, -0.005430,-0.005420,-0.005380,-0.005370,-0.005400,-0.005430] mean_by=lambda x:sum(x)/len(x) mean_shibor=mean_by(x=shibor_3m) mean_libor=mean_by(x=libor_3m) mean_euribor=mean_by(x=euribor_3m) print(mean_shibor,mean_libor,mean_euribor)
0.025049999999999996 0.001490606666666667 -0.005424
通过计算求出SHIB0R、libor、euribor的值分别为:0.025049999999999996 0.001490606666666667 -0.005424
task2
运用 Python 的 def 语法并结合 for 语句自定义一个计算变量波动率的函数,同时运用该函数分别计算 3 个月期 Shibor 、 3 个月期美元 Libor 以及 3 个月期 Euribor 的波动率。
#计算波动率 def volitility(lst): mean=mean_by(lst) deviation=0 for i in lst: deviation+=(i-mean)**2 return (deviation/(len(lst)-1)**1/2) print(volitility(shibor_3m)) print(volitility(libor_3m)) print(volitility(euribor_3m))
4.889285714285866e-09 1.214317906349203e-09 3.1557142857143084e-10
计算得出三者的波动率分别为4.889285714285866e-09、1.214317906349203e-09、3.1557142857143084e-10
task3
比较均值和波动率大小关系
从前面得出的结果来看,SHIBOR的均值最大,LIBOR次之,EURIBOR最小;而从波动率上来看,SHIBOR波动率最大,LIBOR次之,EURIBOR最小。
Part3
task1
任务1: 创建包含每只科技股的日涨跌幅的列表,并且要求每只股票对应一个列表。
#创建列表 aapi = [-.025804,-.0074109,-.024938,-.017920,-.019845,-.009259,-.011246,-.001282,.021012,-.014767,.013314,-.001574,-.000394,-.012377,-.005348] amzn =[-.030721,.010475,-.022324,.003024,.019431,.014735,-.011653,-.000149,.004914,-.013733,.013084,.004333,.001875,-.010735,-0.002179] ibm = [0.004881,-0.013341,-0.020247,0.020311,0.003537,0.002972,-0.008270,-0.005003,0.004819,0.005977,-0.000138,-0.006426,-0.002851,0.003069,-0.000556] csco = [-0.005053,-0.006208,-0.023282,0.0017248,0.007811,0.000756,-0.000189,-0.008691,0.007242,-0.007947,0.018310,-0.001498,-0.007503,0.000189,-0.000378]
task2
访问包含苹果公司股价日涨跌幅的列表,找出涨幅首次超过 2% 的交易日之前的全部交易日的涨跌幅数据,这就相当于首次访问到涨幅超出 2% 时就立刻终止访问,并且输出已经访问过的全部数据。
for i in aapi: if i>=0.02 or i<=-0.02: print(i) break else: print(i)
-0.025804
task3\4
任务3: 访问包含亚马逊公司股价日涨跌幅的列表,找出交易日当天股票是下跌的全部数据。
任务4: 访问包含IBM公司股价日涨跌幅的列表,找出日涨跌幅处于[-0.5%,0.5%]的数据并创建一个新列表;同时,访问包含思科公司股价日涨跌幅的列表,找出日涨跌幅超过0.7%的数据并创建一个新列表。
for i in amzn: if i>=0: continue else: print(i)
-0.030721 -0.022324 -0.011653 -0.000149 -0.013733 -0.010735 -0.002179
#IBM new_list=[] for i in ibm: if i<-0.005 or i>0.005: continue else: new_list.append(i) print(new_list)
[0.004881, 0.003537, 0.002972, 0.004819, -0.000138, -0.002851, 0.003069, -0.000556]
#思科公司 new_list=[] for i in csco: if i<=0.007 and i>=-0.007: continue else: new_list.append(i) print(new_list)
[-0.023282, 0.007811, -0.008691, 0.007242, -0.007947, 0.01831, -0.007503]