数学建模社区-数学中国

标题: Python 应该怎么学? [打印本页]

作者: 杨利霞    时间: 2020-6-8 15:14
标题: Python 应该怎么学?
. {! l% O6 R% V) K- b7 W# S1 X
Python 应该怎么学?
' e+ B' M/ ]% o) C' D& b; W作者:vitu
! _& v1 P8 B/ D& O& C链接:https://www.zhihu.com/question/353341563/answer/1222079739, ~: K9 k  I" k3 A2 W2 p
来源:知乎
( R0 p1 s2 g# L! L! h# L: y著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。' C' d: Z; U0 O% ?4 Z6 I
9 j8 j7 ]5 A% U& ?8 g) ]
分享一个好东西,只需要打开一个浏览器(推荐 Google Chrome 或者 Firefox),输入:  L8 p4 P; d. L& {
https://vitu.ai( }7 o  V; a4 b6 M5 h6 {/ E* `" b  z
就可以看到以下页面然后开始Python的最好的课程之旅。
  J2 m4 I$ S# k9 @5 v3 ?% O. ?+ A点击“开始研究”-》新建-》新建Notebook
3 T& k8 X) h$ o% v然后,就能看到完全配置好的 Python 运行环境了。7 h3 L: k$ ?  V6 p

5 Z5 X! R+ L, c+ c2 q6 p! o2 P, m对,就是这么简单。你可别小瞧这个运行环境。虽然你没有执行任何安装过程,但是它基本上涵盖了你做数据科学/机器学习要用到的各种工具。这些工具包括但不限于 Numpy, Scipy, Pandas 等,甚至连深度学习的框架,例如 Tensorflow, Keras 和 Pytorch,也是一应俱全。( o1 n" |8 O$ Y+ K
可以看看下面的导入测试,都是工作的  z! H6 A; q- I' Q0 P2 o6 e" }
无痛上手的教程等你来学 可以在线运行的免费中文教程,建议按照下面的顺序递进的来学习9 d7 o2 f; g2 {, o
推荐的入门步骤:Python -> 数据处理 -> 数据可视化 -> 机器学习初级 -> 机器学习进阶 -> 深度学习 -> 交易入门, T# ]% N' ]% E. x- G# S
举个入门课程例子如下量化分析师的Python日记【第1天:谁来给我讲讲Python?】
- v. }5 i* c. a, M, F) V/ E1 i2 W: n# w0 P3 j" I
作为无基础的初学者,只想先大概了解一下Python,随便编个小程序,并能看懂一般的程序,那些什么JAVA啊、C啊、继承啊、异常啊通通不懂怎么办,于是我找了很多资料,写成下面这篇日记,希望以完全初学者的角度入手来认识Python这个在量化领域日益重要的语言( W5 R# q/ J  |6 P2 G9 w! x0 J
今天的学习大纲如下:) ^, u6 A' i8 X: x" O, q# }* h7 U
一、熟悉基本
- r+ H+ h( v& c' n二、容器
* s( C; J; G. \/ R1 y2 z& a8 Z; ^; R% g* _
一 熟悉基本
5 g& b- D4 @0 Q- h7 ~& C( W
( P) X+ P+ c3 w6 q  r, I在正式介绍python之前,了解下面两个基本操作对后面的学习是有好处的:; [# N% Y( V* w+ g  y, f
1)基本的输入输出 可以在Python中使用+、-、*、/直接进行四则运算。# ~$ k* ~" z/ M) S2 B; i
1+3*3
: s3 f0 N( ^2 `  `: |10- b2 n# f. _, m& a* r
# w9 z5 b6 j- \& k2 ?$ S
(2)导入模块 使用import可以导入模块,导入之后,就可以使用这个模块下面的函数了。 比如导入math模块,然后使用math模块下面的sqrt函数:
9 _5 N# e3 v( y% Fimport mathmath.sqrt(9)
( ]: ^$ v# e7 ^. r% q8 F3.0
" [, _0 `- k* y7 H8 S7 ^# W' m$ Z0 n7 K0 Y7 }+ c7 F- p
这时我有疑问了:1 d) F, K( v, ]1 d2 r3 G/ l6 d$ j
“每次引用函数的时候,math这个模块前缀都要带吗?可不可以不带?”
- H: o, `3 {* Q/ P直接输入sqrt(9)是会报错的,好烦人,那么有什么办法可以不用每次都带前缀?办法是有的,用“from 模块 import 函数”的格式先把函数给“拿”出来。
7 b) X& P+ S7 y% O( R* P2 g) ffrom math import sqrtsqrt(9)5 E6 g: g/ x- W6 A+ j
3.0; n; V  B3 E- ^( p

% T- r* H1 H' W: D" s7 c这样每次使用sqrt函数的时候就不用再加math前缀了。当我正准备跳过的时候,又有了一个问题?
% k+ N7 B. R' D5 q; r  w' l' P“math模块下面有那么多函数,可不可以写一个语句,然后math下面所有函数都可以直接使用?”6 O/ S" m! ~8 n/ v
调用了math下面的sqrt函数,写一个from…import…,再调用下面的floor,还要写一个,如此也挺麻烦的,有个办法可以一下把所有函数都给“拿”出来:4 z2 r6 ?  B1 I, P0 N4 r
from math import *print(sqrt(9))print(floor(32.9))+ c$ y. ~$ _, i/ H4 ^
3.06 K. d! T& z* Z. M! B! r
325 ]0 N3 ~# c1 C5 M& z
0 A! d5 L* W" w0 n
二 容器1,什么是容器
5 R9 s* W3 e( i( I& V; |开始学Python时,被它的数据结构,什么字典、序列、元组等等搞的很混乱,估计有跟我一样的初学者,所以我梳理了一下留存: 首先要从容器说起,Python中有一种名为容器的数据结构,顾名思义,容器,就是装数据的器具,它主要包括序列和词典,其中序列又主要包括列表、元组、字符串等(见下面那张图)。
' W4 Q2 K; r& x5 A6 v$ `列表的基本形式比如:[1,3,6,10]或者[‘yes’,’no’,’OK’]" v& [; C! r# O. R, v) T
元组的基本形式比如:(1,3,6,10)或者(‘yes’,’no’,’OK’)  {* T9 c7 B% F5 L1 O; k% P& n2 q4 h
字符串的基本形式比如:’hello’& b5 ~2 Y/ O( d/ I
以上几种属于序列,序列中的每一个元素都被分配一个序号——即元素的位置,也称为“索引”,第一个索引,即第一个元素的位置是0,第二个是1,依次类推。列表和元组的区别主要在于,列表可以修改,而元组不能(注意列表用中括号而元组用括号)。序列的这个特点,使得我们可以利用索引来访问序列中的某个或某几个元素,比如:
5 z+ ?. h6 o; g3 ?$ r+ Oa=[1,3,6,10]a[2]- o- [& V1 G/ r2 N+ H
6
* Z0 x& D/ v, b3 `" W- A
& m! I/ o( x  h) sb=(1,3,6,10)b[2]7 C, s' z# z4 i
6
1 {4 c$ ]3 y  c1 z4 S/ ?6 \" _9 s% W
c='hello'c[0:3]; B! z6 Q. |2 R* O: }  A' o( N
'hel'
7 W  [/ V6 k' s3 e+ W  E
# C. L3 g" M9 R, D3 P, b而与序列对应的“字典”则不一样,它是一个无序的容器,, ~& n- g# t% P" _1 D6 \  d9 o% m
它的基本形式比如:d={7:'seven',8:'eight',9:'nine'}
! s' D; J; ?8 y4 P* e2 m这是一个“键—值”映射的结构,因此字典不能通过索引来访问其中的元素,而要根据键来访问其中的元素:& m0 e0 y- _& b
d={7:'seven',8:'eight',9:'nine'}d[8], m3 m7 t! k% P8 K2 X
'eight', N8 d. p$ r+ [" E/ ]

  S& h+ p7 y& H% C0 z' }3 a2、序列的一些通用操作0 I' f6 s4 H6 R" @! e6 p/ ~
除了上面说到的索引,列表、元组、字符串等这些序列还有一些共同的操作。
) b$ _7 a, K6 S(1)索引(补充上面)
( J' F9 X: Q3 d) ?1 Z. U2 C序列的最后一个元素的索引,也可以是-1,倒数第二个也可以用-2,依次类推:1 ^, `$ u( S) n8 @* d% Q
a=[1,3,6,10]print(a[3])print(a[-1])" f: \! N) h0 m5 Z9 M: v
103 |6 J: Z( Q6 D- d. U# ?; @0 }- Z0 o
10' O/ s) R0 R6 E* J, }+ Z7 V

4 ]" V, p7 \5 b+ p(2)分片+ e1 U* {( s: K4 T6 w
使用分片操作来访问一定范围内的元素,它的格式为:
0 S) ?4 Q6 W5 L1 z, aa[开始索引:结束索引:步长]
6 S- R- H; `: f4 a那么访问的是,从开始索引号的那个元素,到结束索引号-1的那个元素,每间隔步长个元素访问一次,步长可以忽略,默认步长为1。
7 X# X: ?+ e% K& j0 Hc='hello'c[0:3]) g% {( ]9 G. f
'hel'
8 U  X2 M4 j& `- W/ ?0 d& \
  g9 p3 @5 h) A3 ?  E2 p* D, y这个就好像把一个序列给分成几片几片的,所以叫做“分片”
$ X. p% R5 `0 l8 O: R% H. v3 D4 \+ i" B& k/ t  S9 f
, `: G( F3 _. G) O9 x! P
(3)序列相加7 X9 T7 H: H& f; @
即两种序列合并在一起,两种相同类型的序列才能相加4 s$ W  S& Q9 `5 s& D
[1,2,3]+[4,5,6]
! `0 @2 g7 m: n[1, 2, 3, 4, 5, 6]" a) ~  c( L7 \; {( s

( K! M3 r9 i1 d/ ]. {) C'hello,'+'world!'& W. F- m: c4 b7 L3 ~* @
'hello,world!'- x) O+ |1 F+ H8 r6 G

0 B2 E8 ?) M& @  d: g(4)成员资格
1 C8 I6 P* J2 D+ T3 r( I) y( S为了检查一个值是否在序列中,可以用in运算符
* F% x/ V, i& R4 D& o- _% W; Ua='hello'print('o' in a)print('t' in a)
2 [' j5 W6 k; [0 K$ K- h' w' S( z9 }True( h# s- p- z, |. g
False
8 a0 l) f0 A6 }+ @' ?0 w/ ]$ [. N2 R$ F6 x6 `
3、列表操作
8 c# s( ]0 f" V* K/ h4 m4 `以上是序列共有的一些操作,列表也有一些自己独有的操作,这是其他序列所没有的
4 A+ C0 a% a2 _) P" h(1)List函数6 P) X6 E. n& k  D
可以通过list(序列)函数把一个序列转换成一个列表:
) i. U3 q/ z( @( b8 klist('hello')# N# \, G7 ]# o. z" `9 |" \
['h', 'e', 'l', 'l', 'o']
) s7 M" p9 |  g% ^  @* J4 T6 a8 d! ?0 b
2)元素赋值、删除
: B  }6 t. k& p; D# O元素删除——del a[索引号]( ~  M- I& i$ r* u
元素赋值——a[索引号]=值
9 T) e* K% ?) U1 B- `1 ia2 d' n7 }/ b+ ~
'hello'* R4 D0 T6 t* f$ V1 m1 @

. H+ Y( m9 {* d0 sb=list(a)b  U( `, Q5 R- W. x! T2 O
['h', 'e', 'l', 'l', 'o']1 S$ K' ^! c/ U/ j" o7 J

' E! d5 O4 p- ?& [3 r; F4 xdel b[2]b
4 T1 x' g. v$ W['h', 'e', 'l', 'o']
5 j6 f9 h0 O' y! x6 {
7 H/ Q; a7 Z4 C  x# |- B; xb[2]='t'b; B2 E2 m9 D( [7 A: a
['h', 'e', 't', 'o']
; k/ ?% e7 p- }# ~( `% U$ L5 {6 X; B- L6 l' _6 f% p
分片赋值——a[开始索引号:结束索引号]=list(值)0 ?/ o* S4 J% ^0 |# j( F, z
为列表的某一范围内的元素赋值,即在开始索引号到结束索引号-1的区间几个元素赋值,比如,利用上面语句,如何把hello变成heyyo?
& v6 @, p3 e* n9 Ib=list('hello')b
# R& ^# I7 t' }6 c6 V! B0 P8 }['h', 'e', 'l', 'l', 'o']  s5 i! h; }! N3 Q2 h
, a( v, U, j$ S; o9 T! H
b[2:4]=list('yy')b
# W3 I- W" R/ R$ B['h', 'e', 'y', 'y', 'o']. W( P2 u3 i3 w% ]8 m1 u
, y2 J* c4 [8 r/ z5 ?
注意虽然“ll”处于“hello”这个单词的第2、3号索引的位置,但赋值时是用b[2:4]而不是b[2:3],另外注意list()用小括号。6 A1 {" G$ ~. O6 Q9 x5 P
(3)列表方法' ~# A2 M1 i. w4 d- m6 }* i
上面说过list函数,函数这个东西在很多语言中都有,比如excel里面的if函数、vlookup函数,SQL里面的count函数,以及各种语言中都有的sqrt函数等等,python中也有很多函数。 Python中的方法,是一个“与某些对象有紧密联系的”函数,所以列表方法,就是属于列表的函数,它可以对列表实现一些比较深入的操作,方法这样调用:
7 s+ J6 _* e# e7 Y% I$ F# ]对象.方法(参数)% a, b& B: U$ r5 y( t. _
那么列表方法的调用就理所当然是:# w$ f8 K7 O) v# f5 [
列表.方法(参数)3 v8 Q" P/ a- t, ~
常用的列表方法这么几个,以a=['h','e','l','l','o']为例:
- ^$ ^! k, h  y8 j' K) ?3 K) X5 u. l/ F; ^2 h. }
a=['h','e','l','l','o']a
# n7 f4 C) P- j. L& q  R4 \% f5 C6 O% U['h', 'e', 'l', 'l', 'o']
* X  F* J9 m! C* i! A9 W* H0 R4 V& y7 ?8 z5 ?
给列表a的n索引位置插入一个元素m: a.insert(n,m). ^+ M6 k2 `5 I' k3 W# l; E" m
a.insert(2,'t')a3 z% B( J* G3 `& V$ R
['h', 'e', 't', 'l', 'l', 'o']
0 Y5 h% d( s- W& q8 w; X
- y" x" ]3 y9 R5 N/ i! t7 L2 f( `给列表的最后添加元素m: a.append(m)2 C. }6 [: d* W
a.append('q')a
! u# o( D5 r; C1 n; K& W2 f8 ]$ \* ~6 Y['h', 'e', 't', 'l', 'l', 'o', 'q']8 r' F3 _3 l& G% n

; x! `% Y. \1 F" r; G返回a列表中,元素m第一次出现的索引位置: a.index(m)4 s2 f2 Q! n2 M' W$ n
a.index('e')$ e2 z: G; f4 x; a5 O
1
, ^% Y6 N( t, h2 R& c4 u& Z; h2 P6 |1 [3 E, F2 I! p) H8 K
删除a中的第一个m元素: a.remove(m)+ I. z- o& E( e& q9 U/ r
a.remove('e')a% p' t! ]% }5 W2 t
['h', 't', 'l', 'l', 'o', 'q']
! t; h( H1 q) x" B0 ~" B7 T, `1 t1 B3 S2 b  |
将列表a从大到小排列: a.sort()
" F( X: `; H: ?( E% J* ja.sort()a
% W" K7 i/ ]# |) r: T['h', 'l', 'l', 'o', 'q', 't']" \5 E; x( ~6 `5 ?0 F

$ i8 c& s% `+ v7 ~- W/ L4、字典操作4 c3 P5 ^4 `6 q
(1)dict函数
5 b; @5 `. G$ udict函数可以通过关键字参数来创建字典,格式为:
/ f+ X& p- x1 m3 adict(参数1=值1,参数2=值2, …)={参数1:值1, 参数2=值2, …}% j' \/ N( y( G" ~/ L. D
比如,如何创建一个名字name为jiayounet,年龄age为28的字典?
4 L" S! D1 O7 O- E: {8 Pdict(name='jiayounet',age=27)* ?5 d( G6 H* o" [: i% e" |5 j# ]5 P
{'name': 'jiayounet', 'age': 27}
, p7 ]6 b! O: q1 z7 ^+ F: H; R8 q# X9 c( d: H0 W5 j
(2)基本操作* @' z' ^- s3 ~4 ?- R" B0 J9 x
字典的基本行为与列表在很多地方都相似,下面的例子以序列a=[1,3,6,10],字典f={'age': 27, 'name': 'shushuo'}为例
2 n- O, J5 E+ G2 \% B  x* \( N6 T5 @) y+ X日记小结: 今天学习了Python的基本页面、操作,以及几种主要的容器类型,天还要学习Python的函数、循环和条件、类,然后才算是对Python有一个大致的了解。% `( s; E% B8 H% m, A7 c
来源:量化分析师的Python日记【第1天:谁来给我讲讲Python?】
$ Y5 a  ?: i) }4 f; x* f) M如果有兴趣,可以看初识Python【今天开始写代码】,有更完善的课程设计
2 \# @/ C( S3 Y7 d( B; N( N2 {( M/ A' h( Z

1 Z& X7 s5 ?0 i9 z4 H" e9 a( G8 k  [
. v. m7 P2 ]& |. ~- I) D
8 V4 R: |2 _8 W% G) w  Z; x




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5