数学建模社区-数学中国

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

作者: 杨利霞    时间: 2020-6-8 15:14
标题: Python 应该怎么学?

2 A5 M0 p( p. XPython 应该怎么学?
$ e9 A  M- q: s9 L2 ]+ v作者:vitu
" E: Z4 g* Y2 i  f' A链接:https://www.zhihu.com/question/353341563/answer/1222079739
# G. x! @5 {0 t% h" i6 x- p3 V来源:知乎% X$ z; A; M: X! g. S
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
6 D) V( x; i6 V$ u& f7 O3 Q# f) c3 K; T  e" e2 g9 p0 ]$ O, f
分享一个好东西,只需要打开一个浏览器(推荐 Google Chrome 或者 Firefox),输入:
! g) R+ b0 P3 o# D4 S( `/ F2 `" bhttps://vitu.ai; _# w+ p. r# C5 z
就可以看到以下页面然后开始Python的最好的课程之旅。
$ A2 r& G# N4 b, j% i  o4 }6 T6 b. P点击“开始研究”-》新建-》新建Notebook4 v0 W% n8 [" I' E* k9 F
然后,就能看到完全配置好的 Python 运行环境了。7 k$ V7 u! e8 d2 U! T! j
, `5 [( F8 E9 a3 V# `6 y
对,就是这么简单。你可别小瞧这个运行环境。虽然你没有执行任何安装过程,但是它基本上涵盖了你做数据科学/机器学习要用到的各种工具。这些工具包括但不限于 Numpy, Scipy, Pandas 等,甚至连深度学习的框架,例如 Tensorflow, Keras 和 Pytorch,也是一应俱全。2 o& |7 y3 h2 e* W0 `/ q
可以看看下面的导入测试,都是工作的8 y- I) g1 _" T$ s
无痛上手的教程等你来学 可以在线运行的免费中文教程,建议按照下面的顺序递进的来学习( l% n0 \! h1 h9 ?
推荐的入门步骤:Python -> 数据处理 -> 数据可视化 -> 机器学习初级 -> 机器学习进阶 -> 深度学习 -> 交易入门7 }+ N* ?1 a3 I- ?. {: f
举个入门课程例子如下量化分析师的Python日记【第1天:谁来给我讲讲Python?】& g: Q" \' A  P4 c- c1 _
0 K( x) Q: c, k
作为无基础的初学者,只想先大概了解一下Python,随便编个小程序,并能看懂一般的程序,那些什么JAVA啊、C啊、继承啊、异常啊通通不懂怎么办,于是我找了很多资料,写成下面这篇日记,希望以完全初学者的角度入手来认识Python这个在量化领域日益重要的语言/ a& q& [- a7 }) C0 `" _* N) W  c3 H
今天的学习大纲如下:
. R6 e- G; Z% M9 ^; `: |$ P# B一、熟悉基本4 A- o% [4 V- B9 G% p& Y% @: Y
二、容器
4 V" @0 z' M7 n0 g  i0 k% C' z  V+ \7 q" v: R( m5 v" r" x- ?
一 熟悉基本: [7 f4 S0 y0 Z
5 o4 e* |4 }. @
在正式介绍python之前,了解下面两个基本操作对后面的学习是有好处的:
! O- V- {# z, x4 w9 [$ E# u7 r' c* R1)基本的输入输出 可以在Python中使用+、-、*、/直接进行四则运算。! b. K6 p$ Y- n, {. v& `( Z
1+3*33 I* f8 C# W9 c- J
10
% T5 D7 e" M( E: d1 \: j
/ y7 c6 j/ H9 r( L6 Z(2)导入模块 使用import可以导入模块,导入之后,就可以使用这个模块下面的函数了。 比如导入math模块,然后使用math模块下面的sqrt函数:
- K+ r0 C. T7 g- i5 ]import mathmath.sqrt(9)) u, w1 n" _9 ?; n3 X
3.0
/ P$ g& E1 i* [( k9 I9 J0 @* [/ I3 n: F' f: y2 a( [
这时我有疑问了:
" T" p: j2 T  T; \# h“每次引用函数的时候,math这个模块前缀都要带吗?可不可以不带?”  A$ X6 L6 y5 r- k5 P, I8 j, |
直接输入sqrt(9)是会报错的,好烦人,那么有什么办法可以不用每次都带前缀?办法是有的,用“from 模块 import 函数”的格式先把函数给“拿”出来。
$ d' }8 i9 P6 |# \! Vfrom math import sqrtsqrt(9)
) ]/ D# K  e5 H0 D3 O3.0
1 U, k/ t4 X( ^& Y) Z  }$ J  s' l( m' V* E/ s6 j  B& J2 m! D8 e
这样每次使用sqrt函数的时候就不用再加math前缀了。当我正准备跳过的时候,又有了一个问题?
2 q" \2 F9 ?" Y5 \  @. f- z) u6 p, q+ B! i“math模块下面有那么多函数,可不可以写一个语句,然后math下面所有函数都可以直接使用?”
" z  q2 W) G$ ~调用了math下面的sqrt函数,写一个from…import…,再调用下面的floor,还要写一个,如此也挺麻烦的,有个办法可以一下把所有函数都给“拿”出来:  ?) U& K$ T/ k, L  I7 i; `9 |# |
from math import *print(sqrt(9))print(floor(32.9))) J5 o$ T$ o4 ?) o6 w9 \# n5 R
3.09 _6 Z, Q& t8 [* t  W8 u) m3 }5 e
32
) p  k. P, o$ h9 |) s' `
$ c+ ?5 P1 w$ W4 M二 容器1,什么是容器/ t- l- x4 O& j  y9 F
开始学Python时,被它的数据结构,什么字典、序列、元组等等搞的很混乱,估计有跟我一样的初学者,所以我梳理了一下留存: 首先要从容器说起,Python中有一种名为容器的数据结构,顾名思义,容器,就是装数据的器具,它主要包括序列和词典,其中序列又主要包括列表、元组、字符串等(见下面那张图)。
' h6 V' J7 A. o( A( L; }& Z: E列表的基本形式比如:[1,3,6,10]或者[‘yes’,’no’,’OK’]
, f! e) s, X$ a& E5 N' n% x元组的基本形式比如:(1,3,6,10)或者(‘yes’,’no’,’OK’)
3 N9 w! z  h/ ~$ f  k& c字符串的基本形式比如:’hello’
- @' @2 z. D& L5 M以上几种属于序列,序列中的每一个元素都被分配一个序号——即元素的位置,也称为“索引”,第一个索引,即第一个元素的位置是0,第二个是1,依次类推。列表和元组的区别主要在于,列表可以修改,而元组不能(注意列表用中括号而元组用括号)。序列的这个特点,使得我们可以利用索引来访问序列中的某个或某几个元素,比如:8 M6 I, j3 D, Y, Q2 ~& x
a=[1,3,6,10]a[2]0 @. X/ V, S$ U" ^5 \4 Y
6
* ~) I+ `; z# U- q0 R# H7 I8 Z4 K0 I  f: V
b=(1,3,6,10)b[2]
' |" L  j3 Y' p' J/ W8 ], L6. @- A0 L# [" w  Q7 C3 _1 `

* Y% r4 s3 ^( \! L% t4 R. P- _c='hello'c[0:3]
) Y# e- j+ @7 k'hel': p4 y# q; P% Y$ E& Q

% j' K* X0 ^6 ]5 C) @5 q( n而与序列对应的“字典”则不一样,它是一个无序的容器," z+ M. M# {& R0 d( L" X8 x4 O
它的基本形式比如:d={7:'seven',8:'eight',9:'nine'}
- v3 Z" p7 t. q/ g: {6 Y- E这是一个“键—值”映射的结构,因此字典不能通过索引来访问其中的元素,而要根据键来访问其中的元素:
8 [4 w: [/ H3 W, ?4 |7 c! }) cd={7:'seven',8:'eight',9:'nine'}d[8]
5 j( ?: _) m! E. l% q9 C4 }/ D. k'eight'  O- _1 v) F3 z7 h  @. ^* E4 I
; ~  `% v. m7 _) N7 g! s6 f
2、序列的一些通用操作
' l; P9 O7 b1 b; B; E. \* {除了上面说到的索引,列表、元组、字符串等这些序列还有一些共同的操作。& j1 ?- N7 g6 Z/ Z
(1)索引(补充上面)
, |. @& U% ]" S: f5 ^% z* s序列的最后一个元素的索引,也可以是-1,倒数第二个也可以用-2,依次类推:7 q* d6 b! m) R* Y/ U- _$ j
a=[1,3,6,10]print(a[3])print(a[-1])
5 k" q6 ~/ {$ \$ X, X. v10
1 ], w( P% V) D* [10. P, T( e( M9 ]0 L( B

4 J; R$ ]3 X% X6 W(2)分片* s! B. z- w  U/ |* K# P) E
使用分片操作来访问一定范围内的元素,它的格式为:: y1 }8 p: I+ T" m, u3 f
a[开始索引:结束索引:步长]0 x# R& g( P9 l  o3 ?' w7 I
那么访问的是,从开始索引号的那个元素,到结束索引号-1的那个元素,每间隔步长个元素访问一次,步长可以忽略,默认步长为1。
. g- \& L/ e' Rc='hello'c[0:3]
6 f6 D7 h/ `. u: A+ z/ ]'hel'. J5 i( p' l9 w+ O4 |

1 R6 s, K5 D# r7 F这个就好像把一个序列给分成几片几片的,所以叫做“分片”
. i, `/ o; k3 [; N0 e; Z# X
4 M( L3 i; r: T( [5 p7 g+ `( N4 c" l' m2 q9 U) }# `
(3)序列相加* Q1 H# y3 X, n/ L0 p5 w- o
即两种序列合并在一起,两种相同类型的序列才能相加" s" I7 \3 {6 O6 s4 }2 j2 G
[1,2,3]+[4,5,6]
# \; I% y* B5 G0 ^" g) R' H[1, 2, 3, 4, 5, 6]
. ]" {1 F2 N! j. d: }9 ~) F* N; g: z! K& k9 Q4 K
'hello,'+'world!'* U8 |3 h) ^. h; Z3 X+ b* ?
'hello,world!'8 g9 {# h- u; E& d* N

2 ?' p& X* C; }% W9 L(4)成员资格" O! L4 q  n, ~. g3 S
为了检查一个值是否在序列中,可以用in运算符, s, o2 U3 b- Y
a='hello'print('o' in a)print('t' in a)9 F4 o9 N/ i) r" h  R$ b
True
4 r& O% @5 k- M5 lFalse
! D5 F3 _: o" i3 t- q
: R- b  [: P0 G* y; b3、列表操作: v; u# A0 p+ g( M5 e' p
以上是序列共有的一些操作,列表也有一些自己独有的操作,这是其他序列所没有的
/ k0 ~4 R  N( z& C" F( J4 U" s4 o(1)List函数7 }$ S" s! |: K/ \
可以通过list(序列)函数把一个序列转换成一个列表:9 w# Z! W- U( s4 T8 `
list('hello')
3 Y9 \; S4 Q: ^['h', 'e', 'l', 'l', 'o']1 S# g( x4 F) h: P. i, ~- ~
' ^# u! v9 F9 `
2)元素赋值、删除
7 A( I, A" z4 j" l6 d, h) Y/ u元素删除——del a[索引号]" E8 I& i! R  x( Q+ `$ I9 a
元素赋值——a[索引号]=值
8 U9 h8 P! F; ~% ^/ q% Da
& p2 c- `+ f9 U" ~'hello'# n* T6 I. |! k/ M* g
7 ?2 u% X* G" f$ U- ?
b=list(a)b8 n% F) U' P) A! C& G5 v4 L( T% H
['h', 'e', 'l', 'l', 'o']
  R8 Z1 V% y7 v2 e/ F6 z/ Y! I" D" [
del b[2]b
! A1 |5 e' ?7 C5 r7 }' B$ O['h', 'e', 'l', 'o']
# i; e. ~9 o9 R1 B$ D; ]& Q
2 t7 l: i5 f& x# `( q+ Fb[2]='t'b+ o6 n& u9 P* r, ~$ |
['h', 'e', 't', 'o']
9 X: t4 o! r* J0 \" k5 Z/ I3 t" d7 @* `1 `/ h3 [$ c* Z( m8 H6 _
分片赋值——a[开始索引号:结束索引号]=list(值)
0 O5 l! L. l! [' g5 f* [为列表的某一范围内的元素赋值,即在开始索引号到结束索引号-1的区间几个元素赋值,比如,利用上面语句,如何把hello变成heyyo?
3 A+ x* Y5 w' H2 C! F2 D! c$ O7 }b=list('hello')b
" b- E! k. W+ U2 K7 w+ _['h', 'e', 'l', 'l', 'o'], v+ D4 b2 ?* K; M- t

' ]) C* ]) i# Xb[2:4]=list('yy')b& z+ F8 u9 d1 d
['h', 'e', 'y', 'y', 'o']* h8 n" ~9 H! H1 w+ G
$ `2 S1 A3 Q4 l. c: Y. R
注意虽然“ll”处于“hello”这个单词的第2、3号索引的位置,但赋值时是用b[2:4]而不是b[2:3],另外注意list()用小括号。+ o+ A, O; Y( w9 _8 r; U, K% e
(3)列表方法, S0 y2 n1 ?7 @* l9 |  \
上面说过list函数,函数这个东西在很多语言中都有,比如excel里面的if函数、vlookup函数,SQL里面的count函数,以及各种语言中都有的sqrt函数等等,python中也有很多函数。 Python中的方法,是一个“与某些对象有紧密联系的”函数,所以列表方法,就是属于列表的函数,它可以对列表实现一些比较深入的操作,方法这样调用:  i4 t3 n' v6 K! z
对象.方法(参数)( q. H/ @' R2 ~8 N2 p8 n
那么列表方法的调用就理所当然是:  p' ?0 w3 k3 \2 i
列表.方法(参数)8 A0 e4 O. v; T5 r4 @9 U3 c
常用的列表方法这么几个,以a=['h','e','l','l','o']为例:& \; `9 b; H6 V7 T( l

( n5 F1 i3 t4 a1 T$ z! \a=['h','e','l','l','o']a* Z1 B. f$ E. u3 w! Z( a% @: B
['h', 'e', 'l', 'l', 'o']
9 W, K% Z& G/ M: J$ d+ _- R3 M: W2 F! u5 m
给列表a的n索引位置插入一个元素m: a.insert(n,m)! O2 i  \  v+ G4 w! n4 ^( G9 z
a.insert(2,'t')a
# v0 N' M) H3 c  u" z% E+ W3 f% t0 @['h', 'e', 't', 'l', 'l', 'o']1 k( u$ i; S' B$ r6 M' A
" C3 s$ O. s, e5 q  x/ @$ W
给列表的最后添加元素m: a.append(m)& R7 B" @& w* l4 W. P, L
a.append('q')a
/ M1 u# c1 N- s0 o- c" U5 h% x3 o['h', 'e', 't', 'l', 'l', 'o', 'q']
5 O: e0 U1 ?9 a& Q! e" \
) n- C5 O- T) ?; z5 Z返回a列表中,元素m第一次出现的索引位置: a.index(m)! q, L$ j" N/ S
a.index('e')
& L' l1 g! \0 a% E7 m7 T6 y1
" v: P: L* T( r4 c- P
% }) }' J/ e# p删除a中的第一个m元素: a.remove(m)
3 y8 K( q3 O$ \) D( [0 D! ca.remove('e')a
5 y) }0 [0 M3 l* M9 V['h', 't', 'l', 'l', 'o', 'q']: U! F* g, ~+ p" B2 i
8 h- t9 h6 U& H. C4 K
将列表a从大到小排列: a.sort()- G3 Z" }, y! K" j2 o/ L9 ^
a.sort()a  c6 t, q4 g8 o5 x, K
['h', 'l', 'l', 'o', 'q', 't']
2 x0 i: T& e9 J( U6 K2 S" i- [1 Q8 H0 j0 Y5 B% E
4、字典操作0 {' {$ a0 @# D' f$ u
(1)dict函数/ e& h/ `$ F( m) J! N" i' E
dict函数可以通过关键字参数来创建字典,格式为:( F8 R2 @% o3 E) o4 H/ {( d
dict(参数1=值1,参数2=值2, …)={参数1:值1, 参数2=值2, …}$ |% m# _# s7 z/ c& a
比如,如何创建一个名字name为jiayounet,年龄age为28的字典?/ O* R9 ^. o4 d" Q$ h; f- j8 I
dict(name='jiayounet',age=27)  O. w% t0 D8 o3 j! p* q* L
{'name': 'jiayounet', 'age': 27}
0 w1 ?/ J1 _7 a5 h$ l% u' Z6 M3 ^+ ^9 p6 h: o7 h/ p  B/ D
(2)基本操作
4 O3 F( w* J5 r8 |字典的基本行为与列表在很多地方都相似,下面的例子以序列a=[1,3,6,10],字典f={'age': 27, 'name': 'shushuo'}为例
7 O$ F8 ?# U7 w) A日记小结: 今天学习了Python的基本页面、操作,以及几种主要的容器类型,天还要学习Python的函数、循环和条件、类,然后才算是对Python有一个大致的了解。. e$ n" \8 M# w' ]( {4 {; N/ k9 R
来源:量化分析师的Python日记【第1天:谁来给我讲讲Python?】
/ L+ D: {1 U3 x如果有兴趣,可以看初识Python【今天开始写代码】,有更完善的课程设计5 X7 Y2 `" K6 \' e+ n" g- D8 s

8 j% y/ I% E, s1 c0 f; F0 m' |  C5 P' x  f
4 H6 H& n" |+ D+ T/ l5 k- F& J5 N  R) [' S; k; ^# X
1 Y6 ^& v* k8 R) N6 k





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