写在前面:由于之前学过一段时间的C++,所以也不算是零基础,所以就没有按照群里面的大纲来写这篇博客,只是把我个人感觉比较重要的内容写了出来,目前是想到哪里写哪里,后期如果有什么新的发现也会加到这篇博客里。
文章目录
一. Anaconda 和 Pycharm
1. Anaconda 概述
Anaconda 和 Jupyter notebook已经成为数据分析的标准环境。Anaconda是包管理和环境管理器,Jupyter notebook可以将数据分析的代码,图像和文档全部组合到一个web文档中。
2. Anaconda 优势
(1)Anaconda 是包管理和环境管理器,是在conda的基础上发展起来的,conda 可以帮助在计算机上安装和管理各种第三方库,包括安装,卸载和更新包 。conda 还可以很好的管理环境,例如你A项目要用到 python2,B项目要用到 python3,conda 就可以让你在不同的项目中建立不同的运行环境(即选择 python2 或者 python3),有时候每个项目用到的包(例如 numpy包)的版本不同,你就可以为每个 numpy 版本建立一个环境,然后在不同的环境中进行工作。
(2)Conda 可以同时安装多个包,例如 conda install numpy pandas 命令就可以同时安装 pandas 和 numpy 包,还可以通过版本号来指定所需的版本,例如 conda install numpy=1.10 ,Conda 还会自动安装依赖项,例如 scipy 依赖于 numpy,当你安装scipy 时,conda 还会自动帮你把 numpy 也安装上。
(3)conda prompt 的比 cmd 稳定很多。我刚开始使用 cmd 里的 pip 命令行时经常出错,用 pip 命令行升级 pip 也不行,当时困扰了很久,最后时使用 anaconda prompt 里面的 conda 语句解决的。 anaconda prompt 和 cmd 基本上都一样,都是通过命令行来操作,使用 anaconda prompt 唯一需要注意的点就是打开时右击以管理员身份运行,因为安装的时候可能出现权限问题。
3. Pycharm
Anaconda 在演示,教学的时候使用比较方便,但是在大型工程中,让你 debug 的时候还是需要一个IDE的,在经过网上调研和周围同学推荐后,最后选择了pycharm。目前刚刚接触,感觉界面还是挺喜欢的。由于刚刚使用,很多功能还没用到,很多优势也还没发现,后期如果有机会的话可能单独写一篇关于pycharm的博客。
4. Python安装第三方库的方法
- 在pycharm中安装,顺序依次是File > Setting Project > project interpreter(解释器) > 点击‘+’选择想要的库安装/卸载即可。
- 在anaconda prompt用管理员权限进入后使用conda命令安装,卸载和更新
- 在cmd中使用pip命令进行安装,卸载和更新
安装选择方法就是我上面的叙述顺序,pycharm安装库是最简单和适应的,适合那些不习惯命令行的同学,anaconda prompt是我认为比cmd更稳定的一种方法,就我而言,我会先选择anaconda prompt而最后选cmd这种方法。
二. Python 基础讲解
1. 变量
python中变量是不需要声明的,但是每个变量使用之前必须赋值,变量赋值以后该变量才会被创建。创建后变量的类型就是赋值的那个值的类型。例如:a = 3;则a就是 int 型变量,此时a已经被创建了,可以直接使用了。命名的一些规范每种语言都差不多,此处就不做赘述了。另外 python 允许为多个变量同时赋值,中间用逗号隔开即可。例如 a ,b ,c =1, ‘eheng’,2.0 ,语句也是成立的。
2. python里的帮助函数
(1)help()函数
作用: 用于查看函数或模块用途的详细说明
语法: help()
返回值: 返回对象的帮助信息
理解: 参数可以是模块,内置数据类型,某个方法等等,个人理解用处不大,用的不多,了解一下即可。
(2)dir()函数
作用: dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。
语法: dir()
返回值:返回模块的属性列表
理解:作用就是返回参数的方法列表,即该变量有哪些函数可以用,个人感觉作用不大,首先是格式不是很好看,其次感觉这个功能很鸡肋,你既然想用一个参数之前应该先了解一下他的相关方法。有一个小tips就是要想看到结果就要使用print()函数将结果打出来。
(3)type()函数
作用:只有第一个参数则返回对象的类型,三个参数返回新的类型对象。
语法: class type(name ,bases,dict),其中 name-类名,bases–元组,dict–字典,类内定义的命名空间变量。
返回值:返回参数对象类型
理解:个人感觉这是三个函数中最有用的了,python 的所有数据类型都是类,可以通过 type() 查看该变量的数据类型:,所以你想知道某个变量是什么参数时就可以使用这个函数,当然想看结果的时候还是要用print()函数打印出来。
3.import 与 from…import
在 python 用 import 或者 from…import 来导入相应的模块。
将整个模块(somemodule)导入,格式为: import somemodule
从某个模块中导入某个函数, 格式为: from somemodule import somefunction
从某个模块中导入多个函数, 格式为: from somemodule import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemodule import *
4. 格式
(1)python的特色就是使用缩进表示代码块,不需要{},每句代码的后面也无需加 ‘ ;’ ,缩进的空格数是可变的,但同一代码块必须有相同的缩进数。
(2)函数或类的方法之间用空行隔开,表示一段代码的开始。即空行的作用就是分割两段不同功能或含义的代码。
(3)print()默认输出格式是还行的,如果不想换行则需要在变量末尾加上end=“ ”,前后print的位置就看’ ‘之间几个空格了
a=[1,2,3]
print(a.end='')
print(10)
输出结果:[1,2,4]10
三. python基本数据类型
1.综述
python里面共有六大标准数据类型,其中不可变的数据类型有 Number,String,Tuple三种,可变的数据类型为 List, Dictionary ,Set 三种,下面就一个一个介绍这些数据类型。
2. Number 类型
(1)数值类型:int ,float,bool,complex 四种,其中整型只有 int 一种,没有 long 等数据类型,python3 中的整型是没有限制大小的,可以当作 long 使用。浮点型可以用浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250),complex的实部a和虚部b都是浮点型,例如complex(a,b)= a + b j
(2)可以使用 del 语句删除对象或者对象的引用,即你先前定义了3个变量,有一个不想用了,就可以使用del语句来删除。
(3)内置数据类型的强制转换:int(x) 将x转换为一个整数,complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式
(4)Number的除法有两个运算符,’/‘ 返回值是float,’//‘ 返回值是 int(返回向下取整后的结果),例如 7 // 2 =3,17 / 3 =5.666666666666667,当计算时既有 int,又有 float,则最终结果是 float,例如 7.0 / 2 = 3.5
(5)一些数学函数和随机函数这里就不介绍了,用到的时候查一下就可以了。
3. String 类型
(1)’ + ‘ 字符串连接符,把两个字符串连在一起;’ * ‘ 字符串复制符,把字符串复制一遍;’ in / not in‘ 成员运算符,判断某个子串是否在给定字符中,返回值是个bool值。
(2)字符串切片操作:变量[头下标 : 尾下标] 截取字符串中的一部分,经常用到的操作
头下标是第一个想要的元素,尾下标是第一个不想要的元素,所以上述操作就是左闭右开的
如果从头往尾数,则下标从0开始,从尾往头数,则下标从 -1 开始。
有了切片操作,很多地方循环就不再需要了。Python的切片非常灵活,一行代码就可以实现很多行循环才能完成的操作
(3)字符串格式化:将一个值插入到一个有字符串格式符 %s 的字符串中
print( "我叫 %s 今年 %d 岁!" %('小明',10))
输出结果: 我叫 小明 今年 10 岁!
注意一下书写格式,另外注意一下代表的意义,下面只列出我认为常用的几个。
%c 格式化字符及其ASCII码
%s 格式化字符串
%d 格式化整数
%u 格式化无符号整型
%f 格式化浮点数字,可指定小数点后的精度
(4)python中字符串是不可以改变的,例如 A [1] = 0 就会报错
4. List 类型
(1)列表就可以理解为c++中的数组,二者都是通过下标来访问的,二者的区别由下面两点构成
- c++ 中 array 创建之前是需要指定长度的(动态数组除外),但 python 中的 list 允许不断地在现有列表上添删元素,即长度是可以动态改变的。
- c++ 中 array 元素只能是同一数据类型,,但 python 中的 list 的元素可以是不同的数据类型,甚至可以 list 相互嵌套
(2)list 访问操作和前面说的字符串的切片操作完全一样,区别就是加了一个参数步长。
(3)list 内置了很多方法,例如 append,clear等,就不用盲目记忆了,多用几次就学会了。
(4)list的创建:list1 = [1, a, 3.4, 5 ],用[ ]括起来的就是 list
5. Tuple 类型
(1)元组和列表的基本相同,唯一的区别就是元组里的元素是不可改变的,而列表里的元素是可以改变或者删除的
(2)tuple的创建:tup1 = (‘Google’, ‘Runoob’, 1997, 2000) ,与list的区别就是使用的是()
(3)元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用
(4)元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组
(5)因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义。
6.Dictionary 类型
(1)dictionary 是 python 特有的结构,和其他语言中的 map 类似,使用键-值(key-value)存储,具有极快的查找速度。
(2)之所以叫 dictionary 是因为他的实现原理就跟字典一样,假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。第二种方法是先在字典的索引表里查这个字对应的页码,然后直接翻到该页,找到这个字,无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢,dict就是第二种实现方式。
(3)dict 和 list 的区别:
- 查找和插入的速度极快,不会随着key的增加而增加
- 需要占用大量的内存,内存浪费多
所以,dict是用空间来换取时间的一种方法,多用在需要高速查找的很多地方
(4)牢记的第一条就是 dict 的 key 必须是不可变对象,因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash),要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key。
(5)dict 的底层就是哈希,所以出现映射/函数是第一反应就是dict 数据结构,dict 是无序的,故没有下标这一说法,但是可以通过key来快速寻找。
(6)字典的创建:d = {key1 : value1, key2 : value2 }
7. Set 类型
(1)set 和 dict 类似,也是一组 key 的集合,但不存储 value。由于key不能重复,所以,在set中,没有重复的值,重复元素在set中自动被过滤。
(2)使用大括号 { } 或者 set() 函数创建集合,创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。创建格式:parame = {value01,value02,…} 或者 set(value)
(3)出现 set 这个数据结构的原因就是方便一些集合的操作,例如集合的交并补的等,会简单那很多
8. 数据结构总结
(1)有序的数据结构:list,tuple 和 string ,故他们都叫做序列,都可以通过下标来访问,剩下的数据结构都是无序的,dict 和 set 是由哈希来实现的,故虽然无序,也可以快速查找
(2)不可变的数据结构:string ,number ,tuple,其他的都是可变的,因为提出这些结构就是为了解决一些问题,不可变局限性就很大了,可以简单的理解复杂的数据结构都是可变的。