数学建模社区-数学中国

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

作者: 杨利霞    时间: 2020-6-8 15:14
标题: Python 应该怎么学?
) e" z  P' p) e1 O0 p4 c$ }
Python 应该怎么学?
; f# A5 a+ K5 Y5 ^/ X1 g作者:vitu
3 p- u, U7 V7 U  s- ]链接:https://www.zhihu.com/question/353341563/answer/1222079739
, [7 V8 I! f  t5 |* B6 r# R4 d; D来源:知乎
3 }: V# A: X, x) t著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。' D9 T0 }$ s& Y9 v7 f+ L
; h" C4 S% T! b0 X4 Q# s" T7 \9 M
分享一个好东西,只需要打开一个浏览器(推荐 Google Chrome 或者 Firefox),输入:
2 y. L7 P$ U6 E- ^https://vitu.ai0 `& K2 g' m5 E: ^8 {2 y; H% y1 u
就可以看到以下页面然后开始Python的最好的课程之旅。/ s4 a( c! t) |1 U  v2 r
点击“开始研究”-》新建-》新建Notebook
5 R4 x' Z: U/ P& y" O然后,就能看到完全配置好的 Python 运行环境了。; C% w" I+ P9 H" B$ w# q; i

0 l* X8 W/ u: e  d- d对,就是这么简单。你可别小瞧这个运行环境。虽然你没有执行任何安装过程,但是它基本上涵盖了你做数据科学/机器学习要用到的各种工具。这些工具包括但不限于 Numpy, Scipy, Pandas 等,甚至连深度学习的框架,例如 Tensorflow, Keras 和 Pytorch,也是一应俱全。& n( J5 s6 ?0 [* x
可以看看下面的导入测试,都是工作的
' B  U7 M5 M. }/ |% y6 s无痛上手的教程等你来学 可以在线运行的免费中文教程,建议按照下面的顺序递进的来学习
. E% l# @7 d0 s5 W; L7 V- Q# X/ |  [推荐的入门步骤:Python -> 数据处理 -> 数据可视化 -> 机器学习初级 -> 机器学习进阶 -> 深度学习 -> 交易入门% R  l6 [4 N& q& f8 j9 h+ |* C, n
举个入门课程例子如下量化分析师的Python日记【第1天:谁来给我讲讲Python?】2 P: }% T! q$ b. w; m

5 ]# m8 p7 [: u7 W/ x3 i( l作为无基础的初学者,只想先大概了解一下Python,随便编个小程序,并能看懂一般的程序,那些什么JAVA啊、C啊、继承啊、异常啊通通不懂怎么办,于是我找了很多资料,写成下面这篇日记,希望以完全初学者的角度入手来认识Python这个在量化领域日益重要的语言
$ J1 u5 ^+ A3 `9 W. u, x今天的学习大纲如下:
& v6 R1 E, k. h3 X4 X一、熟悉基本
% D6 w" u% h. z- @# V二、容器
" D% a! l3 f; ]; C% x. w1 D' y* a) z3 `9 i. f' q9 d
一 熟悉基本
9 H3 L; k4 I( l4 C
9 A9 o* ?* d, A* F" |在正式介绍python之前,了解下面两个基本操作对后面的学习是有好处的:3 K5 a) y/ o& R7 W4 X
1)基本的输入输出 可以在Python中使用+、-、*、/直接进行四则运算。; k1 ?( H) ?5 h" K2 a7 {: I3 ^" I
1+3*35 z' F* a9 d( T# L5 h- x
10
  {4 P2 c8 o* M+ w" p$ }
+ L: d7 g' O( O/ I0 P(2)导入模块 使用import可以导入模块,导入之后,就可以使用这个模块下面的函数了。 比如导入math模块,然后使用math模块下面的sqrt函数:4 v8 J0 o6 @7 F: S! [
import mathmath.sqrt(9)
) W4 a; q; y  |4 w3.0& k7 f( a' F: c: F5 v
  C% H# O6 \: d  R$ s
这时我有疑问了:7 {% G$ m: M! q7 Z
“每次引用函数的时候,math这个模块前缀都要带吗?可不可以不带?”! w  U4 `4 {" ~  m- O) W" r1 `
直接输入sqrt(9)是会报错的,好烦人,那么有什么办法可以不用每次都带前缀?办法是有的,用“from 模块 import 函数”的格式先把函数给“拿”出来。" x) S) F, |! C/ D; V, \3 ?4 R
from math import sqrtsqrt(9)# q, W# T$ p' j0 o6 v
3.0: V. n. O. p" U) N0 `

7 f3 |3 ~, \- y这样每次使用sqrt函数的时候就不用再加math前缀了。当我正准备跳过的时候,又有了一个问题?; X/ e6 O2 \+ z2 ~2 S: Z( g8 q
“math模块下面有那么多函数,可不可以写一个语句,然后math下面所有函数都可以直接使用?”2 W" y1 z" A& x8 y
调用了math下面的sqrt函数,写一个from…import…,再调用下面的floor,还要写一个,如此也挺麻烦的,有个办法可以一下把所有函数都给“拿”出来:0 e6 H# O% e# m: _& D. E
from math import *print(sqrt(9))print(floor(32.9))1 s$ `) m% y- y+ q1 x" p
3.0  a6 j$ O# U. _0 `
32
: D% ]7 B6 z' |9 K- s: z! Z; @7 O; c& Y9 s# v' h: E
二 容器1,什么是容器8 Y2 n( N2 i5 |1 M3 H2 N1 M( i
开始学Python时,被它的数据结构,什么字典、序列、元组等等搞的很混乱,估计有跟我一样的初学者,所以我梳理了一下留存: 首先要从容器说起,Python中有一种名为容器的数据结构,顾名思义,容器,就是装数据的器具,它主要包括序列和词典,其中序列又主要包括列表、元组、字符串等(见下面那张图)。
$ q+ Q& S" M& o' ^$ `列表的基本形式比如:[1,3,6,10]或者[‘yes’,’no’,’OK’]
( @8 K3 J6 a# R7 \2 R元组的基本形式比如:(1,3,6,10)或者(‘yes’,’no’,’OK’)
8 g6 }! `5 t7 h2 U5 E  M字符串的基本形式比如:’hello’
: m$ p  p, q& _! @8 J以上几种属于序列,序列中的每一个元素都被分配一个序号——即元素的位置,也称为“索引”,第一个索引,即第一个元素的位置是0,第二个是1,依次类推。列表和元组的区别主要在于,列表可以修改,而元组不能(注意列表用中括号而元组用括号)。序列的这个特点,使得我们可以利用索引来访问序列中的某个或某几个元素,比如:
  y& w, g$ Y/ _& r+ H0 U3 Va=[1,3,6,10]a[2]
4 M  a! |2 B$ e" K6 a6$ K. V" H$ c; N$ s" Y
9 @2 v, |$ K' H* B3 c3 I* O
b=(1,3,6,10)b[2]  p3 a: d+ w6 q, O2 m  b. _4 u
6$ o" G4 n. T0 X& t$ z' P
3 J' k. z2 H( s* c) ~
c='hello'c[0:3]
$ l" r* S/ v+ C1 y1 f4 b$ }, u'hel'
5 E) i5 r7 l. E1 |
2 v- t  \/ S% n+ {( _; e而与序列对应的“字典”则不一样,它是一个无序的容器,
6 l/ z: E$ T; X9 n它的基本形式比如:d={7:'seven',8:'eight',9:'nine'}8 S4 h3 `$ N4 Y0 D9 ?) L4 i3 R
这是一个“键—值”映射的结构,因此字典不能通过索引来访问其中的元素,而要根据键来访问其中的元素:
/ k' c# b0 i1 t& p5 Yd={7:'seven',8:'eight',9:'nine'}d[8]5 F, Z! n+ v1 `1 h9 ?
'eight'
  e) \. `$ ?" I5 L# D5 A, d8 H% R5 h) A# M5 V; e' ?
2、序列的一些通用操作
* m8 ~$ A5 O2 U$ t6 S0 R3 w除了上面说到的索引,列表、元组、字符串等这些序列还有一些共同的操作。# E& [3 N- {# K3 @9 x/ y
(1)索引(补充上面)
. U' v% F+ P9 ]" `序列的最后一个元素的索引,也可以是-1,倒数第二个也可以用-2,依次类推:
( K- [! h- z$ i6 R, Ma=[1,3,6,10]print(a[3])print(a[-1])9 q$ f' ]' e" ?' N& X- \5 Y9 k2 Z
10/ t' H+ K2 \% \! ^6 N$ h, j* F6 f  e7 x
102 P6 K( u2 g6 }" c+ s9 X. ~
% L8 K3 G9 q- w# H- j0 L' C
(2)分片) G4 r  d% t4 f7 R' U, A; `
使用分片操作来访问一定范围内的元素,它的格式为:! r6 I8 d" N' |+ |/ K6 [
a[开始索引:结束索引:步长]
/ Q# ~3 `- k# p4 I+ a那么访问的是,从开始索引号的那个元素,到结束索引号-1的那个元素,每间隔步长个元素访问一次,步长可以忽略,默认步长为1。+ h1 I, m- l! G; Y" E8 ^+ `
c='hello'c[0:3]
2 \7 z3 e& u# R: Q6 x8 A'hel'9 I5 K  l* F( i4 h3 p0 K. s

6 d/ n! v" h* P' i, r1 c+ w这个就好像把一个序列给分成几片几片的,所以叫做“分片”
+ Y& ^2 c6 g/ \: G1 e
1 \  r- Y. H% U. }+ i) i9 [/ R4 ~! P9 D3 b3 e) Y+ j
(3)序列相加& v$ S6 E; r& N; m2 N
即两种序列合并在一起,两种相同类型的序列才能相加
/ f0 T) G3 ~0 h' ^% ~[1,2,3]+[4,5,6]- @3 V: b' t7 W3 Q  e, n, N$ ~
[1, 2, 3, 4, 5, 6]) n9 b7 X$ Y, C4 L+ y: u4 N
- k7 Q( v0 s+ Z
'hello,'+'world!'
6 f8 a5 Q" S$ p7 a* j0 Z2 |7 k'hello,world!'
% `& c9 O0 U) @# f- Z, ^) i* r' [
( L) g3 n( |. X" _5 ^5 T(4)成员资格
% Q4 X- x( n7 A0 a. f. U为了检查一个值是否在序列中,可以用in运算符
2 U% @/ \! x5 i' k( ga='hello'print('o' in a)print('t' in a)
2 w, k0 w0 ~. H; ^5 X+ XTrue
1 _; |) i( S6 ^% P: T* {False
- F0 {2 V7 [# p& _' \! K0 U& `/ w+ d
3、列表操作0 z$ h. E, ]7 ?1 j
以上是序列共有的一些操作,列表也有一些自己独有的操作,这是其他序列所没有的
- }/ X" f9 }- O% c) e% ?(1)List函数( w0 S2 I7 Q8 h6 I+ k5 ]
可以通过list(序列)函数把一个序列转换成一个列表:
9 @' `0 ]" r, W# wlist('hello')+ E9 B  E9 M2 x9 H
['h', 'e', 'l', 'l', 'o']
. d( |5 t# O1 \/ i/ o- p7 U
' u6 q3 J7 b8 Q, ?2 ?( k+ d% [2)元素赋值、删除8 t7 F- v9 J2 `! u1 o, `3 n, t
元素删除——del a[索引号]
1 n+ A0 p7 }: g元素赋值——a[索引号]=值
; |$ o* I9 A4 B6 V; ^, @; `: Oa$ {; A8 O# r# A8 P; J
'hello'
# s) R+ X: \& R) o" v' e
, ]) |+ f9 K) [. E. J% }b=list(a)b2 W1 d8 u- L' R/ @8 D4 c
['h', 'e', 'l', 'l', 'o']' O5 q' B$ [# U8 F
, u4 y; b* K& [7 l4 [8 q
del b[2]b
' v' V" I. }6 e2 K8 Y; u['h', 'e', 'l', 'o']' R! N% X/ |# A* j( p8 J" S
: L8 w" `9 C, B$ |3 D4 t
b[2]='t'b
9 w; c: f6 T2 \7 \) J% L['h', 'e', 't', 'o']
0 t$ y, w1 y% j6 N& O, q  F( |. G# n) V7 G
分片赋值——a[开始索引号:结束索引号]=list(值)+ K4 Y% y) J! K  {. a: g8 |/ X
为列表的某一范围内的元素赋值,即在开始索引号到结束索引号-1的区间几个元素赋值,比如,利用上面语句,如何把hello变成heyyo?$ i& J1 D  b4 O" @
b=list('hello')b/ o% @+ L0 l% C; e+ ?
['h', 'e', 'l', 'l', 'o']1 \' Y; H" V7 G
  Z1 r- m9 B! m5 }  v9 z$ \' @
b[2:4]=list('yy')b
# a: m6 E7 P# ]/ L4 |) ]['h', 'e', 'y', 'y', 'o']
& M6 N2 T  X2 D; a" S
+ ~: W: p+ g* }( W注意虽然“ll”处于“hello”这个单词的第2、3号索引的位置,但赋值时是用b[2:4]而不是b[2:3],另外注意list()用小括号。3 ?% t3 g" `( Z- P& ]# _$ ~  R" g' @7 v
(3)列表方法5 K7 b5 J7 e( P1 j4 k/ U
上面说过list函数,函数这个东西在很多语言中都有,比如excel里面的if函数、vlookup函数,SQL里面的count函数,以及各种语言中都有的sqrt函数等等,python中也有很多函数。 Python中的方法,是一个“与某些对象有紧密联系的”函数,所以列表方法,就是属于列表的函数,它可以对列表实现一些比较深入的操作,方法这样调用:
0 e# s. w' G( o  {  U对象.方法(参数)
6 @9 m5 Y* a5 R8 I7 Y- b: z那么列表方法的调用就理所当然是:
% I% }: H) u/ @& c列表.方法(参数)" w" v8 G& g4 d  F/ q: j9 C* R6 K
常用的列表方法这么几个,以a=['h','e','l','l','o']为例:9 a$ u5 |, k: k* B5 c
2 L0 |) P* f+ a9 p5 @
a=['h','e','l','l','o']a7 Q. ?8 _1 B# C# H/ g' \, J
['h', 'e', 'l', 'l', 'o']
0 Z& E8 I, [1 c1 f* c
! I, m  }5 X, e给列表a的n索引位置插入一个元素m: a.insert(n,m)
# q' d8 X2 W1 i8 W( d8 H0 s$ Pa.insert(2,'t')a
* g, l7 A2 T) S! Y['h', 'e', 't', 'l', 'l', 'o']
( A# c# q& b; r
3 y: r$ {+ }  ]% ?6 f  h给列表的最后添加元素m: a.append(m)) m/ h4 n' _! Y2 y
a.append('q')a7 h/ t/ P$ n8 o1 C
['h', 'e', 't', 'l', 'l', 'o', 'q']
$ x) U. x" W/ O4 N6 `1 G/ G! Q3 P
返回a列表中,元素m第一次出现的索引位置: a.index(m)3 e2 I" R: F9 ^5 c7 g5 C  B
a.index('e')
/ n& p, O) Z% }18 \& s* B- o. y/ @4 g
( q0 `# n# x: b2 }+ \" G/ h
删除a中的第一个m元素: a.remove(m)
0 t' j  h( b6 B- @& s% ^a.remove('e')a& n; J8 M- j, H+ A
['h', 't', 'l', 'l', 'o', 'q']
3 ?/ R% J: \& e4 a! x' }  \, V8 c' E' Z4 D8 i
将列表a从大到小排列: a.sort()
4 B" Y4 r$ v- p3 W, s1 Na.sort()a+ U: W+ X6 R& N1 ]0 [3 |6 D
['h', 'l', 'l', 'o', 'q', 't']
8 g8 `  w; O9 C
2 m: D- J1 r% L4、字典操作
& t- ?4 C) H$ `7 a(1)dict函数
& \( e  I" {9 r7 Edict函数可以通过关键字参数来创建字典,格式为:* }+ I" _9 J3 s
dict(参数1=值1,参数2=值2, …)={参数1:值1, 参数2=值2, …}
6 M2 u0 X; v+ V0 y比如,如何创建一个名字name为jiayounet,年龄age为28的字典?
1 R' E2 _0 m, L/ }2 odict(name='jiayounet',age=27), j* Y" c7 P9 D6 I' ?
{'name': 'jiayounet', 'age': 27}
; _" S: W9 X' h7 s. [$ }7 A6 n
8 B( j: x/ N& f0 `- y(2)基本操作
" }7 W0 F3 A1 c8 i$ C' f" c字典的基本行为与列表在很多地方都相似,下面的例子以序列a=[1,3,6,10],字典f={'age': 27, 'name': 'shushuo'}为例
6 ]5 M$ v# _9 y7 X& K8 A# O, r日记小结: 今天学习了Python的基本页面、操作,以及几种主要的容器类型,天还要学习Python的函数、循环和条件、类,然后才算是对Python有一个大致的了解。
& G0 z% b5 v9 B5 G: g7 J4 E3 x- N来源:量化分析师的Python日记【第1天:谁来给我讲讲Python?】: ~  B% C8 H% g2 f/ ~1 X
如果有兴趣,可以看初识Python【今天开始写代码】,有更完善的课程设计
2 ?8 A! P" w9 d
7 k: _& n& U- Z/ o9 E9 ~
) S$ J# j9 D6 j2 G3 W' r* z4 a0 q" A4 ?) ]- ]0 {9 A: \

0 @1 H8 s4 c5 _+ e% Y) f! e




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