数学建模社区-数学中国

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

作者: 杨利霞    时间: 2020-6-8 15:14
标题: Python 应该怎么学?
7 b  e1 P+ d8 e" i' `
Python 应该怎么学?( U2 J  ?+ L5 R4 L0 L& N$ ]
作者:vitu
3 D3 c+ \( x( h9 F链接:https://www.zhihu.com/question/353341563/answer/1222079739
. X( ]1 B% p6 X  F* T: C$ W! B来源:知乎  {7 ^) a- P& D5 D2 {
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。$ v7 u9 F/ ?! z6 a1 q, t1 y
; f6 \" D8 U- T- i
分享一个好东西,只需要打开一个浏览器(推荐 Google Chrome 或者 Firefox),输入:/ q/ d/ ^1 V, J6 h" ~+ v
https://vitu.ai
0 e# }# i; e1 D* }* P6 {' C! m就可以看到以下页面然后开始Python的最好的课程之旅。( g+ A5 u2 ?7 ]6 M1 N/ D( _8 {
点击“开始研究”-》新建-》新建Notebook+ F! v; M8 M0 G
然后,就能看到完全配置好的 Python 运行环境了。  j. q' k: w  j9 m

. P0 @  p) C+ g对,就是这么简单。你可别小瞧这个运行环境。虽然你没有执行任何安装过程,但是它基本上涵盖了你做数据科学/机器学习要用到的各种工具。这些工具包括但不限于 Numpy, Scipy, Pandas 等,甚至连深度学习的框架,例如 Tensorflow, Keras 和 Pytorch,也是一应俱全。# K. h# \: i7 y7 j
可以看看下面的导入测试,都是工作的8 s6 V/ y$ p- `! D. z
无痛上手的教程等你来学 可以在线运行的免费中文教程,建议按照下面的顺序递进的来学习
: o7 g( u. K1 N; R8 c推荐的入门步骤:Python -> 数据处理 -> 数据可视化 -> 机器学习初级 -> 机器学习进阶 -> 深度学习 -> 交易入门
$ [3 R9 @) A- `/ E; N, b举个入门课程例子如下量化分析师的Python日记【第1天:谁来给我讲讲Python?】8 B4 n6 A0 B5 E- l6 t: N! H; k
' b- W" ]2 d. ~. X
作为无基础的初学者,只想先大概了解一下Python,随便编个小程序,并能看懂一般的程序,那些什么JAVA啊、C啊、继承啊、异常啊通通不懂怎么办,于是我找了很多资料,写成下面这篇日记,希望以完全初学者的角度入手来认识Python这个在量化领域日益重要的语言
; F/ S* z- Z0 L0 S. z4 X5 x今天的学习大纲如下:. y9 w: X! [; g% C8 ^  }" Q; c
一、熟悉基本! J3 }: X+ L" {6 R# q- D
二、容器
9 _+ g. Q/ A8 @  I/ n* q+ m" W; D% ]5 W; J: X
一 熟悉基本
0 [% ^+ R" U' `! v1 Q# J$ C" `3 J3 X- ~" D. t- k
在正式介绍python之前,了解下面两个基本操作对后面的学习是有好处的:
& W6 Z( D; b' O3 ~2 h7 ]1)基本的输入输出 可以在Python中使用+、-、*、/直接进行四则运算。, A$ P: H7 l; J' i1 p' _
1+3*3
* N. s5 i/ c" A) |10
2 @# p; U& A* O7 N1 ~, f
) e) M- s! f0 O6 t* V& d(2)导入模块 使用import可以导入模块,导入之后,就可以使用这个模块下面的函数了。 比如导入math模块,然后使用math模块下面的sqrt函数:
- J+ a  m+ S( ~3 Limport mathmath.sqrt(9)% c" {- y0 E, O  Q5 @
3.07 e/ I! u8 K2 ^) {

- Q/ H9 S+ i2 V) n: L& G8 u这时我有疑问了:
, q+ a" U! R" N; }8 ~* [- M* l: [“每次引用函数的时候,math这个模块前缀都要带吗?可不可以不带?”7 E6 N- Z, \2 I9 P% r: {; H* I
直接输入sqrt(9)是会报错的,好烦人,那么有什么办法可以不用每次都带前缀?办法是有的,用“from 模块 import 函数”的格式先把函数给“拿”出来。
1 _+ z/ w6 }6 h4 d; e; Xfrom math import sqrtsqrt(9)4 a! g6 L5 V% D9 {
3.0
3 O% A8 u: c5 y3 ]+ d& f; L! K
这样每次使用sqrt函数的时候就不用再加math前缀了。当我正准备跳过的时候,又有了一个问题?
, y: H: K' O$ m“math模块下面有那么多函数,可不可以写一个语句,然后math下面所有函数都可以直接使用?”
& u7 c9 x% `1 N9 h  P! q调用了math下面的sqrt函数,写一个from…import…,再调用下面的floor,还要写一个,如此也挺麻烦的,有个办法可以一下把所有函数都给“拿”出来:
9 i' ]- D% _1 X. G4 qfrom math import *print(sqrt(9))print(floor(32.9))2 T% a- {) q2 z
3.0+ K' D* G2 |8 @( K! r8 v
329 ~8 V# Y% y8 \: @9 a$ H; J
* N4 Z7 G4 Z9 e" I- v; X
二 容器1,什么是容器
, \+ O$ H% r3 J- ~$ T0 r开始学Python时,被它的数据结构,什么字典、序列、元组等等搞的很混乱,估计有跟我一样的初学者,所以我梳理了一下留存: 首先要从容器说起,Python中有一种名为容器的数据结构,顾名思义,容器,就是装数据的器具,它主要包括序列和词典,其中序列又主要包括列表、元组、字符串等(见下面那张图)。
% P- e% F* }# F/ |8 w6 @7 P列表的基本形式比如:[1,3,6,10]或者[‘yes’,’no’,’OK’]
2 L9 J5 O* g( d' `$ F0 b元组的基本形式比如:(1,3,6,10)或者(‘yes’,’no’,’OK’)
8 C4 R6 W" _( s0 o" G7 t字符串的基本形式比如:’hello’
% A+ {( c9 ~, C以上几种属于序列,序列中的每一个元素都被分配一个序号——即元素的位置,也称为“索引”,第一个索引,即第一个元素的位置是0,第二个是1,依次类推。列表和元组的区别主要在于,列表可以修改,而元组不能(注意列表用中括号而元组用括号)。序列的这个特点,使得我们可以利用索引来访问序列中的某个或某几个元素,比如:4 c) U7 H/ U9 C7 d- d1 J
a=[1,3,6,10]a[2]
- j1 D7 g1 g. F( w, k3 A# l9 V8 r6
* ~  W7 a# @) {( c' ]' ]0 w. D% \: L; d3 M: ?; l- M- M0 ?
b=(1,3,6,10)b[2]1 M. V/ S' Q# M
61 J0 r0 G2 O6 _% c6 M
1 Y$ x+ Z3 [- U8 f: _, \
c='hello'c[0:3]2 _2 i, j! f# D
'hel'
  i$ @5 J0 a4 X4 t( ^- m6 l
5 H' o8 {4 `! K5 G+ `# l" k+ h而与序列对应的“字典”则不一样,它是一个无序的容器,
- T6 R9 _3 H4 I它的基本形式比如:d={7:'seven',8:'eight',9:'nine'}% `5 d( ~  c3 c$ y
这是一个“键—值”映射的结构,因此字典不能通过索引来访问其中的元素,而要根据键来访问其中的元素:& a/ H* O  y- M2 ^1 ^9 ]  e
d={7:'seven',8:'eight',9:'nine'}d[8]
' O* ~# a( X3 H# i8 b; |'eight'. ^2 ?  t( l3 s% L# I
, f/ l5 g% q3 A' q
2、序列的一些通用操作
0 G6 ?! F4 j- Y; C' D除了上面说到的索引,列表、元组、字符串等这些序列还有一些共同的操作。
* F! j+ Y# _: ~) Z# J(1)索引(补充上面)) U3 ^' X9 U& X1 t, d
序列的最后一个元素的索引,也可以是-1,倒数第二个也可以用-2,依次类推:4 s7 z; N' ^# U! Q8 M
a=[1,3,6,10]print(a[3])print(a[-1])
0 R9 \' ]+ C/ D4 n8 q10$ u9 Z. N) J( `1 T1 x; O% v1 O
10
8 o3 D1 W$ ~3 t; l, z' t/ q0 _5 N: p$ E$ p) d: Y5 m) l  z
(2)分片5 n- X; E" ]. I: p  W
使用分片操作来访问一定范围内的元素,它的格式为:  y0 c3 e! H/ h8 a$ {7 t) k; d
a[开始索引:结束索引:步长]3 W, {5 Q/ h+ Z* u; ^
那么访问的是,从开始索引号的那个元素,到结束索引号-1的那个元素,每间隔步长个元素访问一次,步长可以忽略,默认步长为1。
3 c  O$ [8 s+ m0 z; Q& ic='hello'c[0:3]2 T) S% d9 R) x. O" d! r. u: b" v
'hel'
8 X6 ~- n: Q! b5 \4 ^
' i; _% h1 \; {$ b$ x9 F这个就好像把一个序列给分成几片几片的,所以叫做“分片”# E. h* l: c! x
! @3 ^6 e# M9 L' B" E. w* C7 K

5 r# m. D9 X& z/ ]* w: w! _$ S2 x* t(3)序列相加
5 t# G4 I9 U' u' B% p即两种序列合并在一起,两种相同类型的序列才能相加4 _' K* |2 u( G& _9 C7 T
[1,2,3]+[4,5,6]: Q$ ]9 `- z5 ~" K4 x* y
[1, 2, 3, 4, 5, 6]
; V6 @; |2 F0 }) r( `4 L/ H& x" j3 l+ K% P
'hello,'+'world!'
+ W" [% I+ H. c8 a) D/ m'hello,world!'6 K! [$ p5 I% d- ?4 T. U& G
6 N+ P9 P' g9 v: b
(4)成员资格4 _" K. B, p+ i7 G6 \
为了检查一个值是否在序列中,可以用in运算符$ z$ b8 j2 ?" }' k( }
a='hello'print('o' in a)print('t' in a)' p( E) k5 I/ A( R
True
+ L( s0 z7 O5 IFalse
. B+ c7 n! N% e# i0 J/ Q" p& \5 `2 l8 C" U
3、列表操作3 R) i3 @* J1 c* M, u, n
以上是序列共有的一些操作,列表也有一些自己独有的操作,这是其他序列所没有的, b5 O# N+ ^- O7 v6 f( S7 N" f
(1)List函数; R" }' {+ ?* c2 C
可以通过list(序列)函数把一个序列转换成一个列表:
0 i  S* J: p' _) l1 _- plist('hello')6 F; l# X+ v3 x- u
['h', 'e', 'l', 'l', 'o']/ Y7 q& d7 w0 r. q7 G0 x
0 U' M2 U/ R/ t8 s9 A, G
2)元素赋值、删除
; i2 n& s" y0 y$ {元素删除——del a[索引号]
( U! l: ~! n) e+ i元素赋值——a[索引号]=值: E- I) D! @8 \: w  p% i
a
9 L3 P* [) L* t- V, U'hello'
' g6 G2 }) v/ f. K( h6 j3 Q
, N- T. D' L2 L; Tb=list(a)b; \. x4 R1 d- M, ?. z- f
['h', 'e', 'l', 'l', 'o']
4 R. j3 C. c5 J' A+ |2 u! c
0 W% c8 W! E4 `# H% b2 ^. vdel b[2]b
* ?4 B  ~% W. m9 ~7 q) X1 j3 _['h', 'e', 'l', 'o']7 F- k( Z# f0 i' V8 Y! }

7 A0 b7 P) x. a" t' A7 y4 zb[2]='t'b5 r/ ~3 i; L. F! a- }
['h', 'e', 't', 'o']/ m- q3 q9 v' o* O% U( d

( I) k* O* t3 L2 R( f( z, Q分片赋值——a[开始索引号:结束索引号]=list(值)
' `: a% ]3 e1 S- `: t1 @7 H. t为列表的某一范围内的元素赋值,即在开始索引号到结束索引号-1的区间几个元素赋值,比如,利用上面语句,如何把hello变成heyyo?, C* F; d% k1 z
b=list('hello')b
' h1 F' p* ^$ B6 E8 P6 E  [$ ~4 R) c['h', 'e', 'l', 'l', 'o']
+ T. Q- [9 Q9 r  ^
! b( B, n/ W" mb[2:4]=list('yy')b
, s4 S! [1 w+ g['h', 'e', 'y', 'y', 'o']2 {! H- r0 n: m5 }/ n6 n3 n

9 j- }$ G, O: x/ Q2 z# {注意虽然“ll”处于“hello”这个单词的第2、3号索引的位置,但赋值时是用b[2:4]而不是b[2:3],另外注意list()用小括号。
* m" Q  j! N& K2 @# s(3)列表方法! t& x" o, P3 L$ D& `
上面说过list函数,函数这个东西在很多语言中都有,比如excel里面的if函数、vlookup函数,SQL里面的count函数,以及各种语言中都有的sqrt函数等等,python中也有很多函数。 Python中的方法,是一个“与某些对象有紧密联系的”函数,所以列表方法,就是属于列表的函数,它可以对列表实现一些比较深入的操作,方法这样调用:
, k) V% b: b4 d. d5 X4 |, v) s8 U7 U1 D对象.方法(参数)
( }$ Z, b* N+ d4 q. r那么列表方法的调用就理所当然是:
& {+ c7 B) j& M: ?. t6 W% [" p列表.方法(参数)" `  K/ F0 u, c0 ^8 q: H9 t% e
常用的列表方法这么几个,以a=['h','e','l','l','o']为例:
$ p2 p7 }7 _+ N5 C! [( y; R8 @  y8 [/ ~* Q/ _( P
a=['h','e','l','l','o']a
. v; ~# h" s* t  O3 F! B% O- M' C['h', 'e', 'l', 'l', 'o']4 Q/ @3 v* |% g- U$ t  \8 R1 Z4 f
, T' P& {' q3 d; j3 [+ W
给列表a的n索引位置插入一个元素m: a.insert(n,m)4 M; c+ D/ B& `% j
a.insert(2,'t')a
: S# e1 ^6 g- x. ]2 `; z, P) Y['h', 'e', 't', 'l', 'l', 'o']) `/ d& s5 y" y

: A  w. ]% Y+ ^7 Z  H  X8 K给列表的最后添加元素m: a.append(m)% ^) p7 s& }( g( f! Y0 `) ?! l
a.append('q')a( g: G( L' G7 ~/ i" U/ p& W6 ?0 o
['h', 'e', 't', 'l', 'l', 'o', 'q']$ _& t! |4 O* Z, @( A0 f5 p
+ G- s& z4 k& Z1 m
返回a列表中,元素m第一次出现的索引位置: a.index(m)* ^5 p6 b8 B* s$ a: o8 {& A2 t4 y
a.index('e')5 }7 C( |! B+ t& Q
1
" p; x6 n. I6 c* Z! w' v, W+ ]0 p" Q+ z9 Q
删除a中的第一个m元素: a.remove(m)
9 R$ Y! v& D2 Q) L  Y+ c" T/ R; Ua.remove('e')a0 d. h  b4 ?0 c- A% J0 n' L, ]9 K# w
['h', 't', 'l', 'l', 'o', 'q']
) m# a5 Q+ E$ [3 C4 V  y. g" I
( i5 V- |! }) s3 r# d2 c+ z将列表a从大到小排列: a.sort()
: R9 f2 p( W. t# T% Fa.sort()a) ]& }) f4 n2 K: \% G) I$ b
['h', 'l', 'l', 'o', 'q', 't']
, |% O2 R$ B! u5 q( C+ g  }
6 o  ?& R- C. @# Q& n9 O% {4、字典操作8 k& ^2 c/ u# T6 a
(1)dict函数
9 l1 q" ~7 s9 v' Kdict函数可以通过关键字参数来创建字典,格式为:
+ y/ \# l. c& Qdict(参数1=值1,参数2=值2, …)={参数1:值1, 参数2=值2, …}% f1 {6 H" H4 h9 _
比如,如何创建一个名字name为jiayounet,年龄age为28的字典?
: j' N& ^) W8 B$ R, y9 G$ Hdict(name='jiayounet',age=27)* j& y" c4 u; ]2 W, X7 ?  f* I
{'name': 'jiayounet', 'age': 27}% `0 Q& B1 Q, O. z

/ G2 K* L% i* k' i2 m% M(2)基本操作
/ D, P: U; f- ~2 E6 R( h, m6 E字典的基本行为与列表在很多地方都相似,下面的例子以序列a=[1,3,6,10],字典f={'age': 27, 'name': 'shushuo'}为例' K9 }% {; r0 O/ }2 Z# r
日记小结: 今天学习了Python的基本页面、操作,以及几种主要的容器类型,天还要学习Python的函数、循环和条件、类,然后才算是对Python有一个大致的了解。( ^  M/ g) u8 H1 L6 @1 ~
来源:量化分析师的Python日记【第1天:谁来给我讲讲Python?】8 q, m/ M/ h9 l- ]( Y% l+ A7 z0 ^5 J
如果有兴趣,可以看初识Python【今天开始写代码】,有更完善的课程设计- Z2 ?# R; B, t$ H: F
# e) b8 t5 S1 h4 i8 i# b8 v+ @
. d2 l2 |8 W1 V3 Q1 t* \& _& P
" i, s- z1 P5 d- b0 b6 B% o
$ e, H) s/ S. \3 h( J+ @





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