数学建模社区-数学中国
标题:
Python 应该怎么学?
[打印本页]
作者:
杨利霞
时间:
2020-6-8 15:14
标题:
Python 应该怎么学?
2 A5 M0 p( p. X
Python 应该怎么学?
$ 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 `" b
https://vitu.ai
; _# w+ p. r# C5 z
就可以看到以下页面然后开始Python的最好的课程之旅。
$ A2 r& G# N4 b, j% i o4 }6 T6 b. P
点击“开始研究”-》新建-》新建Notebook
4 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* R
1)基本的输入输出 可以在Python中使用+、-、*、/直接进行四则运算。
! b. K6 p$ Y- n, {. v& `( Z
1+3*3
3 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* [( k
9 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 |# \! V
from math import sqrtsqrt(9)
) ]/ D# K e5 H0 D3 O
3.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.0
9 _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 ], L
6
. @- 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! }) c
d={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. v
10
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' R
c='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 p
7 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 l
False
! D5 F3 _: o" i3 t- q
: R- b [: P0 G* y; b
3、列表操作
: 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% D
a
& p2 c- `+ f9 U" ~
'hello'
# n* T6 I. |! k/ M* g
7 ?2 u% X* G" f$ U- ?
b=list(a)b
8 n% F) U' P) A! C& G5 v4 L( T% H
['h', 'e', 'l', 'l', 'o']
R8 Z1 V% y7 v2 e/ F
6 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+ F
b[2]='t'b
+ o6 n& u9 P* r, ~$ |
['h', 'e', 't', 'o']
9 X: t4 o! r* J0 \" k5 Z/ I3 t" d
7 @* `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# X
b[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 y
1
" v: P: L* T( r4 c- P
% }) }' J/ e# p
删除a中的第一个m元素: a.remove(m)
3 y8 K( q3 O$ \) D( [0 D! c
a.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 K
2 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' Z
6 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