数学建模社区-数学中国

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

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

( u0 @) s1 f; x# |$ Y* LPython 应该怎么学?2 b$ d% N8 D: N
作者:vitu0 {1 ?  S6 W% w7 V, ^  d  J
链接:https://www.zhihu.com/question/353341563/answer/12220797392 a* a* e& G: n- O/ _$ f- _: g
来源:知乎# e) Y2 i. a4 ~% ~# U
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
, N1 J" n% y2 o! Q6 H% B/ L* G6 \9 A% t1 |( D+ b' R* n
分享一个好东西,只需要打开一个浏览器(推荐 Google Chrome 或者 Firefox),输入:3 b4 e$ v. |9 W9 G
https://vitu.ai
* H5 p& M) U* U9 L8 r就可以看到以下页面然后开始Python的最好的课程之旅。  K) \$ R! Z8 j& U3 `+ Z
点击“开始研究”-》新建-》新建Notebook& {3 _, ~( ?; {; L+ Z( ~4 Z
然后,就能看到完全配置好的 Python 运行环境了。
6 Y  g/ i* O% X& L! `- c6 ]1 I- X+ o1 `2 K0 K
对,就是这么简单。你可别小瞧这个运行环境。虽然你没有执行任何安装过程,但是它基本上涵盖了你做数据科学/机器学习要用到的各种工具。这些工具包括但不限于 Numpy, Scipy, Pandas 等,甚至连深度学习的框架,例如 Tensorflow, Keras 和 Pytorch,也是一应俱全。# y) o5 k  Y5 H
可以看看下面的导入测试,都是工作的
: o. }( r3 b2 u& m5 I7 `3 ]1 u1 |( P无痛上手的教程等你来学 可以在线运行的免费中文教程,建议按照下面的顺序递进的来学习2 \, N6 `5 N: }/ Q
推荐的入门步骤:Python -> 数据处理 -> 数据可视化 -> 机器学习初级 -> 机器学习进阶 -> 深度学习 -> 交易入门
5 q; X! B! S; b  d; o/ Y举个入门课程例子如下量化分析师的Python日记【第1天:谁来给我讲讲Python?】) n" ~+ P. O# |* [
0 _! H0 V0 Y( E- I' \- k
作为无基础的初学者,只想先大概了解一下Python,随便编个小程序,并能看懂一般的程序,那些什么JAVA啊、C啊、继承啊、异常啊通通不懂怎么办,于是我找了很多资料,写成下面这篇日记,希望以完全初学者的角度入手来认识Python这个在量化领域日益重要的语言( n. e. \6 C* b8 i
今天的学习大纲如下:
4 \8 A) p8 K- d) A  [) b- e2 J8 N一、熟悉基本7 U2 q) ?$ C9 S% U+ @
二、容器6 }% p& f& \  x; c

. i4 L/ j) \7 ~一 熟悉基本
% l6 ^& V+ S/ G$ b6 M1 r8 M5 D& J  ]! ^) \$ N9 f. W
在正式介绍python之前,了解下面两个基本操作对后面的学习是有好处的:
. K9 v2 {# m% y- e' a, X1)基本的输入输出 可以在Python中使用+、-、*、/直接进行四则运算。- H  a7 j8 @7 r( w+ F6 D8 H3 t
1+3*36 V1 q( {" r+ ?. ~  I* D4 W2 `
10
8 s# R" ^; w& |, m! i  f' i, @2 Y% ?  X2 D& f/ A
(2)导入模块 使用import可以导入模块,导入之后,就可以使用这个模块下面的函数了。 比如导入math模块,然后使用math模块下面的sqrt函数:5 c, J5 s: j# O0 B! G$ r; N
import mathmath.sqrt(9), s* `' i& F3 Y. @& F/ r5 Q
3.08 m4 ^  O. p2 y  c

2 f' y( [/ {/ D6 A* T. a9 p这时我有疑问了:& m. R) \/ k% u. V# p, i
“每次引用函数的时候,math这个模块前缀都要带吗?可不可以不带?”
# d( f! f* T, P( r- A直接输入sqrt(9)是会报错的,好烦人,那么有什么办法可以不用每次都带前缀?办法是有的,用“from 模块 import 函数”的格式先把函数给“拿”出来。& h1 j2 v7 W# y* I- ]5 T5 A1 J, k; v
from math import sqrtsqrt(9)4 r, {% i  f! H% |- Y0 E6 \
3.0# }; M3 B8 F6 P" I8 C0 p! K
3 w7 N) N  L0 U. u! O
这样每次使用sqrt函数的时候就不用再加math前缀了。当我正准备跳过的时候,又有了一个问题?/ d+ T/ [; h! P2 K7 {; c9 L
“math模块下面有那么多函数,可不可以写一个语句,然后math下面所有函数都可以直接使用?”
# W9 d! O( u1 q4 @8 U3 A调用了math下面的sqrt函数,写一个from…import…,再调用下面的floor,还要写一个,如此也挺麻烦的,有个办法可以一下把所有函数都给“拿”出来:
! L: @! m9 y+ a; C9 `0 Gfrom math import *print(sqrt(9))print(floor(32.9))
/ g* q; k* n. ^  {* h+ H5 X' J7 [& k3.03 E3 g2 E; n/ a  H; K1 j# `
32' l* f: Q: N* @! T9 z7 ]$ p- Y

0 ~8 m) T  w& O$ M二 容器1,什么是容器$ u. R6 s9 z4 _2 k$ R
开始学Python时,被它的数据结构,什么字典、序列、元组等等搞的很混乱,估计有跟我一样的初学者,所以我梳理了一下留存: 首先要从容器说起,Python中有一种名为容器的数据结构,顾名思义,容器,就是装数据的器具,它主要包括序列和词典,其中序列又主要包括列表、元组、字符串等(见下面那张图)。- I! M, H4 T2 B& Y4 S
列表的基本形式比如:[1,3,6,10]或者[‘yes’,’no’,’OK’]5 [" Z1 @8 R5 [- O7 V( v- i3 P
元组的基本形式比如:(1,3,6,10)或者(‘yes’,’no’,’OK’)
; ~3 U# G) W* e2 X$ U字符串的基本形式比如:’hello’% q) K: }/ h0 q$ x/ Q
以上几种属于序列,序列中的每一个元素都被分配一个序号——即元素的位置,也称为“索引”,第一个索引,即第一个元素的位置是0,第二个是1,依次类推。列表和元组的区别主要在于,列表可以修改,而元组不能(注意列表用中括号而元组用括号)。序列的这个特点,使得我们可以利用索引来访问序列中的某个或某几个元素,比如:7 ]" |/ a5 o8 O
a=[1,3,6,10]a[2]: q% z8 S2 l6 y+ g* d8 Q7 r' |* k
6
  p8 t. m- R+ w8 ~% a# |' J: W0 }( X! K
b=(1,3,6,10)b[2]
# S* D, M% |# u6
* D1 Q: m, X, k8 I2 [' D( k2 G/ }, l5 E
c='hello'c[0:3]; V# R8 N+ _% S
'hel'
- k2 e+ `2 A' L/ x1 [6 Z) L
5 p5 M* u3 e& B+ I4 w5 I而与序列对应的“字典”则不一样,它是一个无序的容器,
) r3 W% z$ {/ G- ~+ H1 n* m它的基本形式比如:d={7:'seven',8:'eight',9:'nine'}
9 z/ p- b$ f; l4 X这是一个“键—值”映射的结构,因此字典不能通过索引来访问其中的元素,而要根据键来访问其中的元素:
4 N* s5 a- ]8 o. s& v" O) m3 Bd={7:'seven',8:'eight',9:'nine'}d[8]
( @- |, B- `) d'eight'
0 K' J2 o1 b5 F" y. U4 c' Z& q. \" a- I( z& S
2、序列的一些通用操作! G+ M7 `* f+ ^2 ~
除了上面说到的索引,列表、元组、字符串等这些序列还有一些共同的操作。: K7 x9 y0 j4 v
(1)索引(补充上面)* L+ x4 e9 W, V% `+ h) [' i0 \7 D; N. T
序列的最后一个元素的索引,也可以是-1,倒数第二个也可以用-2,依次类推:- o3 e5 d4 u2 Z# C( H& Y! O% ?( R/ R
a=[1,3,6,10]print(a[3])print(a[-1])  s/ ]% y! D( C% m5 Y1 p
10: H1 x5 b8 |! v6 j" G
109 U9 Y& D1 y5 @' r' F
& D' H9 }  [# Z. s" q
(2)分片, o" m/ P2 j; L$ @5 Q5 l
使用分片操作来访问一定范围内的元素,它的格式为:/ F( x2 V; O+ T2 z) k* s- N" q
a[开始索引:结束索引:步长]
" b! {# ~; ]0 p/ ?; S0 Q那么访问的是,从开始索引号的那个元素,到结束索引号-1的那个元素,每间隔步长个元素访问一次,步长可以忽略,默认步长为1。5 o; T  k, `/ Y4 z% B" h6 p9 K
c='hello'c[0:3]
7 Z% L* p, b/ |: T: I1 n8 W' d: F6 w'hel'
( b' {0 r2 U3 {) z3 m1 H( d/ R/ R& p- z1 Z( Q5 q+ S
这个就好像把一个序列给分成几片几片的,所以叫做“分片”6 u% Z4 F4 w( Z
: s& [9 c' N8 R- D  [

  z7 l: ^2 P# u5 [0 z) s& q* _& B(3)序列相加$ S- O( x% E, _3 o: u
即两种序列合并在一起,两种相同类型的序列才能相加
. K) h. d2 {( z# K[1,2,3]+[4,5,6]
7 T* T+ \+ a7 i  t[1, 2, 3, 4, 5, 6]
5 k4 x( d- ]$ U/ O( u3 }2 d/ X3 O! }  V* N: C# x
'hello,'+'world!'
$ o! a4 a' x; M" M" x'hello,world!'
) S1 z# o  t( p. W9 ~- ^7 Z- g' ]. d* O1 W( a
(4)成员资格
. w& N/ u( Q/ h" ^& y% v' ~. u为了检查一个值是否在序列中,可以用in运算符
% Y# X! A" u* b- {a='hello'print('o' in a)print('t' in a)  o3 X6 V9 C& y: R  ^/ f# {8 h" B
True
( }" `; _  }. \. K+ cFalse! ?  O9 k) j- r6 ?& N# K
( ]( o+ F  w. E$ Q" q" r, E0 U
3、列表操作! P2 M' ]* k+ Q9 C  G  q0 R$ e  W8 Z5 n/ Q
以上是序列共有的一些操作,列表也有一些自己独有的操作,这是其他序列所没有的2 f" ~: k% i3 r) _  x$ G
(1)List函数
; ^. \" m4 k  b* C0 r5 Z) o& y9 b可以通过list(序列)函数把一个序列转换成一个列表:
- p- ^! D2 i  V, C6 f5 Wlist('hello'), E7 I8 g' Y- P# _6 z9 z; L8 g
['h', 'e', 'l', 'l', 'o'], I! m3 A# R2 Z# O0 [3 d
9 ^. h$ \8 a+ ?+ K0 q0 }" _* m0 C  t( \
2)元素赋值、删除
; c9 t- m$ L2 Y0 @5 ~( ~6 Y. A元素删除——del a[索引号]& W( B! \  ]- y" K  {4 s
元素赋值——a[索引号]=值3 m6 {( X% b/ g- R
a8 E# U& e! d# y8 a! T2 z9 }
'hello'
3 a) K: S8 e+ ?; {% q
$ {* |6 P. H8 j# [) Zb=list(a)b
. E8 J' y0 K3 Z5 N; h: V['h', 'e', 'l', 'l', 'o']
/ \' Q8 L1 `% |9 T% J! j
. i( g/ ?6 _" }" Vdel b[2]b
1 ]- ^% I! R# {+ a['h', 'e', 'l', 'o']; Y+ V. M7 K7 T7 C! L6 m, n* u  }9 `! y
( E8 J% G: w+ ~" D
b[2]='t'b2 W3 F* L- [, u9 |9 A0 m/ `
['h', 'e', 't', 'o']
0 V5 P! E# P# C, g2 k! d0 @! g
1 M" x( D) c6 v) w, S分片赋值——a[开始索引号:结束索引号]=list(值)
2 E6 J8 z& w' r3 ^5 N6 d. O为列表的某一范围内的元素赋值,即在开始索引号到结束索引号-1的区间几个元素赋值,比如,利用上面语句,如何把hello变成heyyo?$ Y; b. R1 O, a3 Q6 ]
b=list('hello')b& p9 p2 k( b. C3 T5 x
['h', 'e', 'l', 'l', 'o']
7 B. E1 p7 @) t8 ?% J/ k) T! b7 j4 X" ?' `# p4 R2 K% n
b[2:4]=list('yy')b
# w: ?+ h6 ]: J8 Z% W# B['h', 'e', 'y', 'y', 'o']
- Y4 @5 ?9 O/ B+ b( {/ h: o# T$ P1 s$ F9 |
注意虽然“ll”处于“hello”这个单词的第2、3号索引的位置,但赋值时是用b[2:4]而不是b[2:3],另外注意list()用小括号。5 y4 V' b" I! N! J2 l: p
(3)列表方法
1 H/ K, }% k' W1 p. I0 x9 @. B% B上面说过list函数,函数这个东西在很多语言中都有,比如excel里面的if函数、vlookup函数,SQL里面的count函数,以及各种语言中都有的sqrt函数等等,python中也有很多函数。 Python中的方法,是一个“与某些对象有紧密联系的”函数,所以列表方法,就是属于列表的函数,它可以对列表实现一些比较深入的操作,方法这样调用:
$ ?  Y0 d1 a; C7 V( e对象.方法(参数)
- z: I# x5 @+ h' w8 {$ u* {# O那么列表方法的调用就理所当然是:0 h9 {: E, j5 j" h
列表.方法(参数)
9 R! i6 T7 G% Q. b& I$ E$ `: G常用的列表方法这么几个,以a=['h','e','l','l','o']为例:
$ N& D9 _# L& P7 D, H$ h
& y& ~3 ]+ l* U' n, f, \a=['h','e','l','l','o']a" O2 _# q1 E+ e5 {
['h', 'e', 'l', 'l', 'o']
4 n8 E. Y1 m5 B! S0 a, a& B0 R! t2 z# J2 @, o
给列表a的n索引位置插入一个元素m: a.insert(n,m)
; A) n' t5 k2 s- y4 Ua.insert(2,'t')a3 Y. I- w: V: X
['h', 'e', 't', 'l', 'l', 'o']+ L  F. K+ y8 {% m# q
9 e6 f% q4 i7 _: Z. Y6 f
给列表的最后添加元素m: a.append(m)
9 Q1 J1 k8 Z% ^7 x3 Ea.append('q')a
6 {+ W, s& A5 ^' a# c['h', 'e', 't', 'l', 'l', 'o', 'q']
  K. o- Q: {$ q9 V9 {8 A- R" @
9 F! K+ o9 ~2 K9 ]5 {0 E返回a列表中,元素m第一次出现的索引位置: a.index(m)+ w: B, a: k, P
a.index('e')
/ D+ x" X* \0 T3 A/ w; @$ V1
8 }4 ]7 m( R1 l: y) Y  P' F( ~/ Z& p. B
删除a中的第一个m元素: a.remove(m)$ n: ?! m! J" G  z8 K
a.remove('e')a& c* [3 G7 T$ @. M; t6 U- u/ q
['h', 't', 'l', 'l', 'o', 'q']( f% R- W: \6 _( r$ _  h- t
3 u; s- Z9 ]9 ^3 l  g
将列表a从大到小排列: a.sort(): O( n* ~% L9 J, g, N0 x* X
a.sort()a/ t. p5 v7 g4 n# o
['h', 'l', 'l', 'o', 'q', 't']
( Z% E, b8 l( F" H; ], e
1 F" o8 w, c+ p7 S+ P4、字典操作
: U' U$ \( p$ X4 M! j5 c(1)dict函数1 X4 l5 l% J, F" c  q1 x) T
dict函数可以通过关键字参数来创建字典,格式为:( [+ V8 u1 O" `( k
dict(参数1=值1,参数2=值2, …)={参数1:值1, 参数2=值2, …}
5 x1 Y, N: i0 p/ E$ [比如,如何创建一个名字name为jiayounet,年龄age为28的字典?. t1 W& n: s* q# o! Z
dict(name='jiayounet',age=27)
7 U  b: [; G+ O1 i3 ^{'name': 'jiayounet', 'age': 27}- V' X" s" u7 D6 M- A

$ {* d4 i2 `' R2 i9 W2 [1 {+ [* L(2)基本操作
" z" k7 q/ |. Z2 M字典的基本行为与列表在很多地方都相似,下面的例子以序列a=[1,3,6,10],字典f={'age': 27, 'name': 'shushuo'}为例0 b" Z! J% O+ K! l( d
日记小结: 今天学习了Python的基本页面、操作,以及几种主要的容器类型,天还要学习Python的函数、循环和条件、类,然后才算是对Python有一个大致的了解。
/ g' o& Q& e' |" r" I3 V4 J来源:量化分析师的Python日记【第1天:谁来给我讲讲Python?】& ?/ e+ {+ e/ H- ]) g& H, Z
如果有兴趣,可以看初识Python【今天开始写代码】,有更完善的课程设计8 z8 W$ l# P4 s% N: h6 T& A4 m
* P7 p# [7 h( Z+ C* x1 g$ w6 W. o
& u6 \. {3 |' X, h) s
& o/ J  j# ]! B% }7 }

& [( l% x4 L. z. o- e7 r+ H( }




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