数学建模社区-数学中国

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

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

, r+ w. Y" O# {6 q$ fPython 应该怎么学?
! i1 r: M5 k, @; t4 S作者:vitu
% c& q( q9 C! T# Y5 `链接:https://www.zhihu.com/question/353341563/answer/1222079739
3 g2 A' I: J% B来源:知乎9 [2 e* F  \+ r# R; a* _
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
" g( F) W* t' |, Y
7 o/ V6 e/ w1 O8 w  d  X5 N5 u分享一个好东西,只需要打开一个浏览器(推荐 Google Chrome 或者 Firefox),输入:: N1 P( G9 Y1 i1 G$ ~7 o
https://vitu.ai
* `, {  h0 k4 j8 E! ?就可以看到以下页面然后开始Python的最好的课程之旅。! E* _! S- w' |
点击“开始研究”-》新建-》新建Notebook
/ k1 V6 c9 w& b6 T+ u/ {* Z: _然后,就能看到完全配置好的 Python 运行环境了。
  P8 K: V6 s0 q2 Y- ?
6 m( E4 }) [. t; Y; v对,就是这么简单。你可别小瞧这个运行环境。虽然你没有执行任何安装过程,但是它基本上涵盖了你做数据科学/机器学习要用到的各种工具。这些工具包括但不限于 Numpy, Scipy, Pandas 等,甚至连深度学习的框架,例如 Tensorflow, Keras 和 Pytorch,也是一应俱全。
; F- r2 {( E' p- s# A- z; ~5 @可以看看下面的导入测试,都是工作的
5 B. m0 D& \) G, a无痛上手的教程等你来学 可以在线运行的免费中文教程,建议按照下面的顺序递进的来学习/ v4 }) s: J  w) m' B
推荐的入门步骤:Python -> 数据处理 -> 数据可视化 -> 机器学习初级 -> 机器学习进阶 -> 深度学习 -> 交易入门
$ j1 O! {* L* r) ?, l举个入门课程例子如下量化分析师的Python日记【第1天:谁来给我讲讲Python?】
. N+ h$ _& v8 T; U6 M6 {! [; X7 d
0 e  x% k+ g7 N3 r& J0 Z作为无基础的初学者,只想先大概了解一下Python,随便编个小程序,并能看懂一般的程序,那些什么JAVA啊、C啊、继承啊、异常啊通通不懂怎么办,于是我找了很多资料,写成下面这篇日记,希望以完全初学者的角度入手来认识Python这个在量化领域日益重要的语言
4 O+ U+ X0 L1 N% O, q今天的学习大纲如下:$ I: ^$ C1 L4 I$ i# H7 i+ G
一、熟悉基本
" }/ ?8 o  \8 T3 b% ], i& K3 ?二、容器1 f* T5 H8 {3 ^0 e! H0 q( P

" o# \( _# u1 j( \2 `0 g一 熟悉基本; |  e; p' @: S8 D& [) b
$ I/ P( M8 k( M$ M3 A, Q9 P
在正式介绍python之前,了解下面两个基本操作对后面的学习是有好处的:* O, T6 M+ |. z1 P8 e, R
1)基本的输入输出 可以在Python中使用+、-、*、/直接进行四则运算。8 C. i9 ?; d7 M1 t) q  M1 s4 I# E
1+3*3
) h' j8 w$ w( d/ n" V" r+ t10; ^( ^! C4 w: C
3 K9 h/ m) K7 }1 V* h* T' b# B
(2)导入模块 使用import可以导入模块,导入之后,就可以使用这个模块下面的函数了。 比如导入math模块,然后使用math模块下面的sqrt函数:; A% n) ]" s# u! Y5 H' [$ X- V+ d9 o
import mathmath.sqrt(9); i4 k' w. {& R$ j) n, @
3.0
7 r6 \6 U& C) j$ ]; v2 x2 i7 o/ p2 B
  E2 g( P2 O7 P* P- p2 W这时我有疑问了:
! I! p! e# Z' a$ v6 g( _“每次引用函数的时候,math这个模块前缀都要带吗?可不可以不带?”" `, T4 R5 E3 u) {4 t' k9 O! L' L3 x9 }
直接输入sqrt(9)是会报错的,好烦人,那么有什么办法可以不用每次都带前缀?办法是有的,用“from 模块 import 函数”的格式先把函数给“拿”出来。
) n0 k& H$ U+ k: ifrom math import sqrtsqrt(9)
8 N( h% A/ Y  }' g# W0 R0 L3.0
+ [/ D. K! t$ h$ h0 ^8 j% L+ ]5 l5 b! w
这样每次使用sqrt函数的时候就不用再加math前缀了。当我正准备跳过的时候,又有了一个问题?
0 L1 r  u" }# U9 @0 Y& [" t“math模块下面有那么多函数,可不可以写一个语句,然后math下面所有函数都可以直接使用?”1 ?# C8 y4 Z* [4 P/ d. k
调用了math下面的sqrt函数,写一个from…import…,再调用下面的floor,还要写一个,如此也挺麻烦的,有个办法可以一下把所有函数都给“拿”出来:& w. K: e( z6 J1 h: X5 G
from math import *print(sqrt(9))print(floor(32.9))
$ F) u# u! N$ P6 a- Y) o. Y3.0
* e* `' [3 n: S' V, y32- H- Q  J5 W& n1 G& Y6 ]( H

2 t- l6 o# g3 S二 容器1,什么是容器( y' w7 b2 V5 c4 w+ N9 k
开始学Python时,被它的数据结构,什么字典、序列、元组等等搞的很混乱,估计有跟我一样的初学者,所以我梳理了一下留存: 首先要从容器说起,Python中有一种名为容器的数据结构,顾名思义,容器,就是装数据的器具,它主要包括序列和词典,其中序列又主要包括列表、元组、字符串等(见下面那张图)。# o+ v* K4 B% D. h# v" z
列表的基本形式比如:[1,3,6,10]或者[‘yes’,’no’,’OK’]1 ~( A  L' H, {& Q- E# }9 M6 ~& z
元组的基本形式比如:(1,3,6,10)或者(‘yes’,’no’,’OK’)
$ S2 a4 c. H4 @0 R% S字符串的基本形式比如:’hello’- s. H/ Z+ K8 P# J1 m
以上几种属于序列,序列中的每一个元素都被分配一个序号——即元素的位置,也称为“索引”,第一个索引,即第一个元素的位置是0,第二个是1,依次类推。列表和元组的区别主要在于,列表可以修改,而元组不能(注意列表用中括号而元组用括号)。序列的这个特点,使得我们可以利用索引来访问序列中的某个或某几个元素,比如:  }  S1 Y. e1 r
a=[1,3,6,10]a[2]2 k0 J; R( w4 o; s/ n
6
' Q8 t$ q: S+ ^" W3 `  Y% p* f) W. ]3 M! d' ~4 [
b=(1,3,6,10)b[2]# u8 t. ^/ m% c* n( S- F9 f( Q. p
6  Z" c% }, S1 @# n+ k' C
/ V% d/ Q; u6 R
c='hello'c[0:3]2 V$ s3 L2 A( E( X3 p" C4 H
'hel'
, v* w1 P) O! b1 c& z3 A' h8 Z6 h0 }2 n  _
而与序列对应的“字典”则不一样,它是一个无序的容器,
( E. U1 b2 ?: x. P* e它的基本形式比如:d={7:'seven',8:'eight',9:'nine'}- u+ \; e( G' [3 z9 b
这是一个“键—值”映射的结构,因此字典不能通过索引来访问其中的元素,而要根据键来访问其中的元素:$ c+ P: S, D0 E+ b. c+ I
d={7:'seven',8:'eight',9:'nine'}d[8]
6 X* _" w0 \1 P1 D% z'eight'; S, m& p! V$ F, i. e5 N
% I5 ~, G# \  ^
2、序列的一些通用操作
3 Y7 h6 C% b1 E" @$ G' H5 }除了上面说到的索引,列表、元组、字符串等这些序列还有一些共同的操作。
3 {( x8 ^8 Q- s- R(1)索引(补充上面)  ]( A- M# n, j1 P/ ?' W
序列的最后一个元素的索引,也可以是-1,倒数第二个也可以用-2,依次类推:- g! A, y% x+ r- E/ v4 v- q- A. _
a=[1,3,6,10]print(a[3])print(a[-1])* ~$ X& F# o7 e: x1 p9 t
10
2 x  Q; Y$ y2 A! d% y2 g10' p2 z# Q9 D" _) r. o& d# Y1 H

, F, z: P0 m9 ]4 D& {1 b* S(2)分片8 a- r. R9 B1 X6 D& x
使用分片操作来访问一定范围内的元素,它的格式为:3 \- p0 V, r- W) ]9 L
a[开始索引:结束索引:步长]& H: F% L6 o% u( k
那么访问的是,从开始索引号的那个元素,到结束索引号-1的那个元素,每间隔步长个元素访问一次,步长可以忽略,默认步长为1。
! i7 o  J$ f" d4 o7 Sc='hello'c[0:3]/ c% d4 `% v; l2 b
'hel'
4 x* U- k8 }. g6 n! j- I8 i1 M' z  L. r% [. [8 U$ E3 }, `( e* x
这个就好像把一个序列给分成几片几片的,所以叫做“分片”# ^3 _! ^( y# g) P5 D2 k) [

8 n& @0 z' l1 N7 E  t* C. F, ]5 F1 y8 |/ W( m, H2 V; G0 A* ]
(3)序列相加$ f& q8 V/ U, B" V; w& `, N( V1 F
即两种序列合并在一起,两种相同类型的序列才能相加
' W& L. c4 R; E% H: s- L[1,2,3]+[4,5,6]# t" e# U: X, Z/ t
[1, 2, 3, 4, 5, 6]
. I+ _. L6 W1 Q4 P* h' V8 `4 `. i( ]! e; B" k# [
'hello,'+'world!'
! e# ^& w6 b+ T$ n. Z'hello,world!'
. C# ~7 N- w" i5 X
! _6 g3 c; D3 f) s5 R8 G(4)成员资格8 o: a# r2 }0 P0 q7 e% E
为了检查一个值是否在序列中,可以用in运算符+ g# L/ i+ X/ V8 Y2 o5 }+ Y8 n; @
a='hello'print('o' in a)print('t' in a)
$ w$ u( p* ?. K# A8 f2 T1 RTrue/ [1 u7 k  B+ I" E( o
False; r5 c, B4 `' R* m! f, A

! t& C: F; }5 B. e$ o7 J9 x2 {4 ?( t3、列表操作
8 Z5 k7 @! z" c! y以上是序列共有的一些操作,列表也有一些自己独有的操作,这是其他序列所没有的
- b: V# K3 W/ u* }(1)List函数
* a/ s: [, q" _6 E9 X* g可以通过list(序列)函数把一个序列转换成一个列表:5 a' Y" |  l& V# _
list('hello')% |( w* w1 c# N! R* M4 T
['h', 'e', 'l', 'l', 'o']
; {  U; m9 X/ p* }2 `$ ^. J
: b' }0 b) ?3 ~: ]4 b: J2)元素赋值、删除
$ g1 M0 H( I% h# \; Q元素删除——del a[索引号]
" d, i1 z" \5 J: a3 f元素赋值——a[索引号]=值
7 g6 z; h+ T' _a
$ K( W( a8 ]2 s5 J; G$ l'hello'
. O6 m& J/ E3 |- r0 r0 y
- D" b9 P- g  ?- \6 q8 M6 l( Bb=list(a)b! _$ V9 J/ P# m% c/ t& q4 [2 u0 N$ V
['h', 'e', 'l', 'l', 'o']
, V  X2 I( D: X: U
3 r, W8 l: d0 t/ N9 _- n% r3 }* mdel b[2]b
( c, b( }) U4 V, Z['h', 'e', 'l', 'o']% L- G7 d" a$ Q  r) p+ L7 G
0 y6 ]( s; m8 t+ {/ F7 @) N2 ~
b[2]='t'b
$ w1 H9 O+ E4 j* I: S- s['h', 'e', 't', 'o']5 g* C2 K4 p; Z# t2 Y5 ~( n
, t2 c+ _, R) K6 N  \% d+ a$ a
分片赋值——a[开始索引号:结束索引号]=list(值)
$ c: p( c/ q0 `; u9 k9 `) p. b为列表的某一范围内的元素赋值,即在开始索引号到结束索引号-1的区间几个元素赋值,比如,利用上面语句,如何把hello变成heyyo?
/ z! l' n" f" Z6 }b=list('hello')b
+ Q" X2 L$ L9 H['h', 'e', 'l', 'l', 'o']- G) ^$ Q# U/ K+ L3 o1 {

4 p1 K; k0 k* u& F, @) Rb[2:4]=list('yy')b
, u7 D- {$ x5 \& z4 j$ h['h', 'e', 'y', 'y', 'o']
" Y; w' X+ Q/ X- \1 c  k" q  Q3 S) x* c6 O3 @* r
注意虽然“ll”处于“hello”这个单词的第2、3号索引的位置,但赋值时是用b[2:4]而不是b[2:3],另外注意list()用小括号。
2 l8 T7 O4 E1 g& a/ R" h1 O(3)列表方法2 M- J+ {6 `8 a( K$ W% s
上面说过list函数,函数这个东西在很多语言中都有,比如excel里面的if函数、vlookup函数,SQL里面的count函数,以及各种语言中都有的sqrt函数等等,python中也有很多函数。 Python中的方法,是一个“与某些对象有紧密联系的”函数,所以列表方法,就是属于列表的函数,它可以对列表实现一些比较深入的操作,方法这样调用:4 }9 |0 v/ y0 Z8 J; {- B+ e
对象.方法(参数)" j0 Z4 Q  A- R9 n$ @
那么列表方法的调用就理所当然是:  P' i2 u  V2 N' |! \
列表.方法(参数)
  A" c- C" M7 N) n  W; `5 F常用的列表方法这么几个,以a=['h','e','l','l','o']为例:
& s& Z6 {8 ^8 A/ F% S/ }
  m/ L. @) Y* R; ra=['h','e','l','l','o']a
2 d! N' ^$ F8 n1 v['h', 'e', 'l', 'l', 'o']
; |7 r- q. `1 g$ P( K. r( e9 T" S% r3 b
给列表a的n索引位置插入一个元素m: a.insert(n,m)
2 q+ r3 |" R: z+ sa.insert(2,'t')a! g5 x$ c7 y+ \6 U
['h', 'e', 't', 'l', 'l', 'o']! f# E  `5 D( |' R6 i

* f# ]) r' ?: [0 |$ l给列表的最后添加元素m: a.append(m). [$ N/ {" w$ w
a.append('q')a5 ^+ }4 J; v5 T& }; w, Q
['h', 'e', 't', 'l', 'l', 'o', 'q']: |, |0 y- r  S
; {* A+ U: D: y
返回a列表中,元素m第一次出现的索引位置: a.index(m)& z: Z% E: D) g  m
a.index('e')
4 o* b' F4 t! s# Y' {1, k. L/ \9 x+ C9 b: V

, {% F6 {( j) t# o" {删除a中的第一个m元素: a.remove(m)5 T. v/ @# R& K) |- W+ G# b7 J
a.remove('e')a
$ O* i5 [8 z2 \: G4 [& w2 l3 F['h', 't', 'l', 'l', 'o', 'q']' b6 P$ B' p+ }3 [% X+ x

4 R6 `- M, x" Q  f! ^将列表a从大到小排列: a.sort(). f4 `# Y; O; U3 U! v/ \
a.sort()a
$ V, [, j& M; ~; P9 |9 k: {) ^['h', 'l', 'l', 'o', 'q', 't']7 a5 O8 _/ e* l; ~3 {: U& R

$ A: U' z/ {! E9 b" }& F4、字典操作
6 O( e3 Q  a9 F) [# k: D% X- W(1)dict函数4 o. }9 g+ a# x0 c9 r
dict函数可以通过关键字参数来创建字典,格式为:
* P3 U# v2 g3 qdict(参数1=值1,参数2=值2, …)={参数1:值1, 参数2=值2, …}% o9 Q) ~# o% R* ?9 x: N* z2 q& F5 g
比如,如何创建一个名字name为jiayounet,年龄age为28的字典?; Q2 f% F/ P2 u7 c
dict(name='jiayounet',age=27)% e1 _" U, j9 F$ }- G
{'name': 'jiayounet', 'age': 27}2 i; q( B. n# O# N) x* g8 v- }
! R! R& M  y- K. V9 M2 H
(2)基本操作
+ m3 Y& W' N7 v! F5 r字典的基本行为与列表在很多地方都相似,下面的例子以序列a=[1,3,6,10],字典f={'age': 27, 'name': 'shushuo'}为例% V, ]  p9 A# G$ y# z
日记小结: 今天学习了Python的基本页面、操作,以及几种主要的容器类型,天还要学习Python的函数、循环和条件、类,然后才算是对Python有一个大致的了解。- v, y0 _% {, H5 @' B8 k+ Z
来源:量化分析师的Python日记【第1天:谁来给我讲讲Python?】, p: O+ k; j8 [/ v) B* I
如果有兴趣,可以看初识Python【今天开始写代码】,有更完善的课程设计1 y' E2 ^' h5 y3 S! T
4 x1 ~" F! H% e) S2 Q4 f

1 I% W, W1 T  d8 t& M
5 O7 f; u- Q' c8 D# O
8 r2 v, `8 ^7 O) w8 j2 \2 y8 C




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