数学建模社区-数学中国
标题:
Python 应该怎么学?
[打印本页]
作者:
杨利霞
时间:
2020-6-8 15:14
标题:
Python 应该怎么学?
6 ?5 A: s/ H: K0 C5 W5 R
Python 应该怎么学?
7 B, d& h* W) z, s) Z" z( E- r
作者:vitu
( o) ]+ a8 H; s9 U2 o
链接:https://www.zhihu.com/question/353341563/answer/1222079739
/ V W% E( F' H! K' Y6 E% j
来源:知乎
$ N+ l; W$ p6 L, A3 Y1 P' a+ G
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
4 E5 c& D9 ^# R \9 j0 W
: ]1 a7 E; J8 z6 Y; O' _6 Z9 F$ S; M
分享一个好东西,只需要打开一个浏览器(推荐 Google Chrome 或者 Firefox),输入:
% K- V4 J2 P, d' R& u' s
https://vitu.ai
& C& N$ @' C1 q% F: }
就可以看到以下页面然后开始Python的最好的课程之旅。
% k9 o. l. P; D
点击“开始研究”-》新建-》新建Notebook
: Q/ l! ]: u7 s- q1 n
然后,就能看到
完全配置好
的 Python 运行环境了。
4 u1 Z2 \+ v* W! _; x: D
9 T$ N# S* a) n+ }6 q, @3 U7 D
对,就是这么简单。你可别小瞧这个运行环境。虽然你没有执行任何安装过程,但是它基本上涵盖了你做数据科学/机器学习要用到的各种工具。这些工具包括但不限于 Numpy, Scipy, Pandas 等,甚至连深度学习的框架,例如 Tensorflow, Keras 和 Pytorch,也是一应俱全。
6 Y0 b0 W7 [. E
可以看看下面的导入测试,都是工作的
3 e( n) F3 b2 k1 }9 X
无痛上手的教程
等你来学
可以在线运行的免费中文教程,建议按照下面的顺序递进的来学习
/ S( d6 {) [! ]+ D8 Y
推荐的入门步骤:
Python -> 数据处理 -> 数据可视化 -> 机器学习初级 -> 机器学习进阶 -> 深度学习 -> 交易入门
* D8 J4 U4 k% ?/ k b/ p
举个入门课程例子如下
量化分析师的Python日记【第1天:谁来给我讲讲Python?】
* `- T+ {% |7 r+ I8 U6 R7 u2 U0 g
9 }7 x2 g: X# N; H
作为无基础的初学者,只想先大概了解一下Python,随便编个小程序,并能看懂一般的程序,那些什么JAVA啊、C啊、继承啊、异常啊通通不懂怎么办,于是我找了很多资料,写成下面这篇日记,希望以完全初学者的角度入手来认识Python这个在量化领域日益重要的语言
5 F; V* {% W9 H: V
今天的学习大纲如下:
1 @4 I6 q, n: [- L
一、熟悉基本
0 a; j D& z" [# E* Y+ x
二、容器
3 F+ _' L5 N; K! T8 a9 O
" A, l" _; K; M- S
一 熟悉基本
+ a& B) d( l' n s- @7 r
! c8 Y5 T9 E) I+ M9 j* B N
在正式介绍python之前,了解下面两个基本操作对后面的学习是有好处的:
+ ^0 h" e1 _# S+ t. n# j& I
1)基本的输入输出 可以在Python中使用+、-、*、/直接进行四则运算。
" v8 J+ `4 K% d! a! O0 Z
1+3*3
! S5 P8 a; W& B2 D
10
) Z9 [; j b9 A6 R8 I% U% ?% r
, P; q$ s4 w* D9 H0 Y4 B
(2)导入模块 使用import可以导入模块,导入之后,就可以使用这个模块下面的函数了。 比如导入math模块,然后使用math模块下面的sqrt函数:
6 U' q2 w+ Q6 @; h* @, a
import mathmath.sqrt(9)
: m+ |( o2 ]: J$ |
3.0
. z% N! @0 ~7 b a1 T' N- [
% O1 O) Q" ~; A8 f' A, L
这时我有疑问了:
9 k4 Z0 p' K% B
“每次引用函数的时候,math这个模块前缀都要带吗?可不可以不带?”
5 L& u" F- U3 Q# E. D. s+ o
直接输入sqrt(9)是会报错的,好烦人,那么有什么办法可以不用每次都带前缀?办法是有的,用“from 模块 import 函数”的格式先把函数给“拿”出来。
. [9 ]* _) h& y0 d E& Y% Z7 v
from math import sqrtsqrt(9)
* @: j0 F* O; C8 Y7 \3 ]. J
3.0
7 S, [* j* F; y. @5 f) r
. Y, y i. Q0 [0 [
这样每次使用sqrt函数的时候就不用再加math前缀了。当我正准备跳过的时候,又有了一个问题?
0 q/ M! w( Z. S$ Q
“math模块下面有那么多函数,可不可以写一个语句,然后math下面所有函数都可以直接使用?”
8 m) a4 f8 k$ c% b
调用了math下面的sqrt函数,写一个from…import…,再调用下面的floor,还要写一个,如此也挺麻烦的,有个办法可以一下把所有函数都给“拿”出来:
& b" q. z" {4 R+ m {+ I
from math import *print(sqrt(9))print(floor(32.9))
& P, M. P/ J' _& b
3.0
M: X. [8 z. j" u
32
# P! \+ j$ S- ~. t: S/ V
% a- p+ ?- S) j# P& V4 K2 S
二 容器
1,什么是容器
5 P( I2 \+ H0 g* E3 a
开始学Python时,被它的数据结构,什么字典、序列、元组等等搞的很混乱,估计有跟我一样的初学者,所以我梳理了一下留存: 首先要从容器说起,Python中有一种名为容器的数据结构,顾名思义,容器,就是装数据的器具,它主要包括序列和词典,其中序列又主要包括列表、元组、字符串等(见下面那张图)。
$ ~- {3 ?1 K$ t9 {
列表的基本形式比如:[1,3,6,10]或者[‘yes’,’no’,’OK’]
4 H6 u( l/ [# l+ y: z8 G
元组的基本形式比如:(1,3,6,10)或者(‘yes’,’no’,’OK’)
4 S9 m) a0 {2 |6 @/ g/ D
字符串的基本形式比如:’hello’
% f i% l, t! c4 g" ?
以上几种属于序列,序列中的每一个元素都被分配一个序号——即元素的位置,也称为“索引”,第一个索引,即第一个元素的位置是0,第二个是1,依次类推。列表和元组的区别主要在于,列表可以修改,而元组不能(注意列表用中括号而元组用括号)。序列的这个特点,使得我们可以利用索引来访问序列中的某个或某几个元素,比如:
/ c q$ r( Q5 V3 C$ m
a=[1,3,6,10]a[2]
4 O7 m; V* @ {% u) Y' R; V% I! J
6
! J+ s( M5 i8 l( P' g' v
5 |1 h& c/ P: O' J" G0 D1 l" A, z
b=(1,3,6,10)b[2]
* K9 @ P- ?0 x
6
2 G. x& E- q' A2 P) N$ u# u
$ r4 \3 q6 r" [# A
c='hello'c[0:3]
8 _$ Y9 Y7 J; x. _! E Y
'hel'
) r: u6 d- a2 o" Q9 Y
5 u0 K( u8 Z9 S$ e8 _" p
而与序列对应的“字典”则不一样,它是一个无序的容器,
1 r6 _, {/ I+ G/ e$ B. N7 b
它的基本形式比如:d={7:'seven',8:'eight',9:'nine'}
' ^0 k* l' f7 A# W
这是一个“键—值”映射的结构,因此字典不能通过索引来访问其中的元素,而要根据键来访问其中的元素:
1 v4 p3 K, N4 X' J- j* \
d={7:'seven',8:'eight',9:'nine'}d[8]
" |, u; f" x8 y- W
'eight'
8 R _" u( d0 `- H; f
! g3 D& }4 X: _1 L ]
2、序列的一些通用操作
/ ~! k& P* G5 Q9 c# e
除了上面说到的索引,列表、元组、字符串等这些序列还有一些共同的操作。
0 ?5 v9 O6 {2 n8 {- y
(1)索引(补充上面)
% O8 n; O* b6 c; L
序列的最后一个元素的索引,也可以是-1,倒数第二个也可以用-2,依次类推:
) Q9 |% {; s& w
a=[1,3,6,10]print(a[3])print(a[-1])
+ f% d, p- b2 t6 C; y' q
10
6 g9 s" k" P; a6 X: [, O
10
. c& m+ [, \( o/ @; r8 W& I, j
6 e; b- ?. q) E5 b) x
(2)分片
z# W. H; f" {2 y2 ~3 U2 X
使用分片操作来访问一定范围内的元素,它的格式为:
, R, n& Z# @ W2 d0 O* ?
a[开始索引:结束索引:步长]
; y, ^) a( }4 Q g: q
那么访问的是,从开始索引号的那个元素,到结束索引号-1的那个元素,每间隔步长个元素访问一次,步长可以忽略,默认步长为1。
5 ?" ~7 d9 U- y$ c
c='hello'c[0:3]
$ X9 \* X8 p7 J/ |( \
'hel'
- t' b/ G8 \, F* ~3 v
2 I( r, v% q7 l# o- Y
这个就好像把一个序列给分成几片几片的,所以叫做“分片”
2 c! F) X7 a/ p+ @8 L/ j
% x$ e/ L9 |, V8 b: ~
9 v0 f1 E" \; t. `
(3)序列相加
: }: S0 h: l# i) W+ ~, C3 |# Q
即两种序列合并在一起,两种相同类型的序列才能相加
5 K6 H9 j5 f1 g5 B5 a! g* @
[1,2,3]+[4,5,6]
0 V& @1 T+ }. Z2 K8 Q5 [& h
[1, 2, 3, 4, 5, 6]
- Q5 s% w6 Z, m' C0 q
2 t; {: r4 ^. v( D4 \
'hello,'+'world!'
3 r* j0 X" r- B: y3 q" r# ~5 w
'hello,world!'
9 j/ `( l$ i3 c' |
" e! _* \9 Y0 V& k) n+ ]$ e9 Q
(4)成员资格
) N( \ e+ _1 k. X/ \
为了检查一个值是否在序列中,可以用in运算符
% _) b0 r$ K4 w. {4 e# \* I3 S% N
a='hello'print('o' in a)print('t' in a)
3 K/ Z, @6 H5 |: }: \
True
! m+ O0 s5 d) @' [: w5 S* h
False
( I6 c9 m: G7 ^# `
& [% g/ V9 {0 A$ @. Q' N' G. S
3、列表操作
& |* U, T+ f! {
以上是序列共有的一些操作,列表也有一些自己独有的操作,这是其他序列所没有的
4 ^. X' f, u( M9 N4 U- t! B
(1)List函数
7 Y5 G9 h9 H7 h, l( v) v
可以通过list(序列)函数把一个序列转换成一个列表:
( ^) [4 Z* y* b9 |3 ^& g
list('hello')
' o5 `+ T4 ]) u, A: t& Y4 q
['h', 'e', 'l', 'l', 'o']
9 d3 R4 ]( M# f K: i8 R2 h3 b
( t( T, d0 U0 h
2)元素赋值、删除
3 H- }) `7 o( @4 S
元素删除——del a[索引号]
! J5 W' _& L4 Z5 h
元素赋值——a[索引号]=值
Y% ^8 ~. B0 T& `8 ]) k# c) I" z- X
a
0 |; _* a' u+ c: @: A" r* H( N
'hello'
* q" L8 x# m2 H0 h! A( {4 a& X9 t
5 M% c( `1 x) q2 F
b=list(a)b
4 Q+ I$ r1 g7 C
['h', 'e', 'l', 'l', 'o']
5 q& M8 S7 q( M" V; G/ E+ L8 G
/ m0 ]6 m1 ?! l9 t$ `+ {2 R; X1 c
del b[2]b
1 W7 J9 I0 [- V, H, ?- g6 X; y
['h', 'e', 'l', 'o']
# j1 [, e3 |8 P% p/ L
+ N3 P, c) n+ t: j( w) m& q
b[2]='t'b
$ Z- `; }" c0 n9 f6 W- z
['h', 'e', 't', 'o']
( \3 u; B1 D3 q3 h) I( I: x
7 ?0 I3 F7 L# Z: w6 m7 C
分片赋值——a[开始索引号:结束索引号]=list(值)
7 g# k2 x! O4 z- x! H
为列表的某一范围内的元素赋值,即在开始索引号到结束索引号-1的区间几个元素赋值,比如,利用上面语句,如何把hello变成heyyo?
2 ^0 J: Y: c0 |$ O! F- }& w
b=list('hello')b
$ f. O9 _; E6 h; a
['h', 'e', 'l', 'l', 'o']
5 s, G: v( c2 E* A- E2 L
+ L6 H; g$ D$ C. w
b[2:4]=list('yy')b
. O" @+ D- u0 a& g7 q; [8 B
['h', 'e', 'y', 'y', 'o']
7 I5 t( D7 F2 O/ O/ }& l
* s. f6 M% ~; P0 Q
注意虽然“ll”处于“hello”这个单词的第2、3号索引的位置,但赋值时是用b[2:4]而不是b[2:3],另外注意list()用小括号。
1 o# @! \) j) f2 K1 z' z
(3)列表方法
- |; m9 ?2 I% `) G4 B
上面说过list函数,函数这个东西在很多语言中都有,比如excel里面的if函数、vlookup函数,SQL里面的count函数,以及各种语言中都有的sqrt函数等等,python中也有很多函数。 Python中的方法,是一个“与某些对象有紧密联系的”函数,所以列表方法,就是属于列表的函数,它可以对列表实现一些比较深入的操作,方法这样调用:
* T% f# f0 [3 r9 C. H
对象.方法(参数)
7 |: l- r7 a# K* f& n# d0 E
那么列表方法的调用就理所当然是:
: e. d8 v7 V4 D h. [
列表.方法(参数)
1 t7 O; r+ W0 P4 `$ ?
常用的列表方法这么几个,以a=['h','e','l','l','o']为例:
/ \! i8 g( m9 [! P/ C
% g7 q. o/ E. N* N9 ?
a=['h','e','l','l','o']a
, N9 `: P* r; A2 p( Q J
['h', 'e', 'l', 'l', 'o']
% z) N+ }$ G; c* I6 Z
) B. N' j# ~4 ^4 f! t" q
给列表a的n索引位置插入一个元素m: a.insert(n,m)
+ ?7 h% G" a: |! ^2 q
a.insert(2,'t')a
$ V$ l% }) b p, ~+ ~8 u
['h', 'e', 't', 'l', 'l', 'o']
' j0 o5 a8 t. h
6 z# E* `0 B7 D* ]. e2 f# p% c
给列表的最后添加元素m: a.append(m)
' w5 O1 k3 t- y0 n* a( ]0 W
a.append('q')a
3 m: J! {: N3 u" w
['h', 'e', 't', 'l', 'l', 'o', 'q']
u% j# U e+ K
; y9 K G# G. ]/ Q: U% i6 k8 Y/ Z
返回a列表中,元素m第一次出现的索引位置: a.index(m)
7 e! I$ d' `. {. Y
a.index('e')
) S6 `+ z7 u5 K! r1 M
1
3 S* [/ `3 Y9 c. j8 g
+ W9 E: C# b' I. q& r. q0 U
删除a中的第一个m元素: a.remove(m)
" J _3 O D% K8 O a( w
a.remove('e')a
8 _9 X& m& j# o! H, ]2 B3 |
['h', 't', 'l', 'l', 'o', 'q']
- p8 a( m/ i! r. M
) o( |/ R1 ?9 r W' l
将列表a从大到小排列: a.sort()
. K2 Z" ^7 E2 D# ?1 n
a.sort()a
# v: H3 F) s0 w
['h', 'l', 'l', 'o', 'q', 't']
9 v6 T; \$ @ n6 F
- R1 i1 U. L* W8 A5 b* ~
4、字典操作
& U4 {$ B4 f5 J4 _
(1)dict函数
+ ]" a% H4 k4 h4 @4 O3 U! K- k
dict函数可以通过关键字参数来创建字典,格式为:
R" N- V9 Z) k4 a1 i
dict(参数1=值1,参数2=值2, …)={参数1:值1, 参数2=值2, …}
. s3 n$ Y* }: O& z$ u7 A
比如,如何创建一个名字name为jiayounet,年龄age为28的字典?
+ T& p) s; `/ h0 c6 p
dict(name='jiayounet',age=27)
" q9 ^4 ]% O& m! A3 Y
{'name': 'jiayounet', 'age': 27}
! g5 M9 P2 ?* G$ `
: P6 P' `0 k4 D, t L$ K
(2)基本操作
1 j- h( F8 y/ }4 E
字典的基本行为与列表在很多地方都相似,下面的例子以序列a=[1,3,6,10],字典f={'age': 27, 'name': 'shushuo'}为例
0 p- V, _; w+ B' A2 @3 x2 M, X
日记小结: 今天学习了Python的基本页面、操作,以及几种主要的容器类型,天还要学习Python的函数、循环和条件、类,然后才算是对Python有一个大致的了解。
0 `! f( o/ ]2 C4 R1 n
来源:量化分析师的Python日记【第1天:谁来给我讲讲Python?】
4 b5 ]- q0 r" K- j
如果有兴趣,可以看
初识Python【今天开始写代码】,有更完善的课程设计
9 ~, p- g! ?, s* e
6 S% S: Q2 h0 L7 \! O
# E: h) v' i. [! {0 ]: D
+ U0 _# \0 c% b0 e
$ X2 b) |9 F. m
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5