大学本科学的计算机科学与技术,十年过去了,如今准备捡起来。目前python跟当前工做有很大帮助,因此从python开始从新走编程之路。html
python
https://www.typora.io下载地址git
鼠标选择段落-标题等级web
正文格式的基础上,行开头输入一个#加空格,以后输入的内容变为一级标题,两个#变为二级标题。依此类推,一共6个#6级标题。也能够用ctrl+1标记一级标题。面试
鼠标点选段落,有序标题,会自动缩进。也能够正文格式数字1.加空格开头,自动变为缩进后的有序列表。数据库
按一下回车,自动换行到下一个 。按两下回车,结束当前有序列表。按退格键,删掉数字,以后按Shift+tab键也能够结束当前有序列表的缩进。编程
再原有缩进基础上,按ctrl+]中括号,能够增长缩进行。api
无序列表是不带序号的点点点列表。数组
加一个红色bash
插入图片能够截图直接粘贴,系统自动起名并显示路径,但此路径是本机路径。保存为doc格式时,只是经过路径调用,没存在文件内。须要选文件-导出-PDF,就能够把包括图片在内的内容保存为PDF。
插入:在段落里点选表格
姓名 | 性别 | 爱好 | 年龄 |
---|---|---|---|
http://www.javashuo.com/tag/www.baidu.com | |||
直接输入网址,能够自动变成超连接,超连接鼠标左键点击只提示,按ctrl按左键就能够打开了。 | |||
百度一下 | 输入中括号再输入小括号,变为超连接加备注,中括号内输入备注,小括号内输入地址。此时的地址,能够为本地地址,也能够时网络地址,网络地址记得加https:// |
print("朱荣升")
<span style="color:red;">加一个红色</span>
输入三个波浪键点插入代码块。代码块输入后再右下角能够选择编程语言。
百度搜索python。www.python.org
安装多版本,可在每一个版本的exe程序重命名加版本号方便区别。
在个人电脑-属性-高级系统设置-环境变量-path-编辑-新增长python安装路径进去,win7系统可能用封号隔开粘贴进去。win10系统直接新建加入路径。
把全部版本的python都配置好,就能够在cmd命令行里直接调用了。
http://www.jetbrains.com/pycharm/
professional是专业版,建议使用但收费。community社区版,免费。
安装过程,选择激活码。
以后粘贴激活码激活
选择上图这里,在右边输入python的安装地址。
目前讲到这里。
括号,引号等会自动补齐并跳转光标。
shift+回车,完成当前行代码并跳到下一行开头。
end 跳到当前行最末尾
ctrl+d复制粘贴当前行并插入到当前行下一行
ctrl+shift+上下箭头,是上下插入移动当前行。
https://git-scm.com 下载安装git。
注册码云https://gitee.com ,加入组织,新建仓库,记住用户名密码和仓库的网址。
本地建立一个文件夹做为本地仓库,用来对接网站的远程仓库,在本地仓库空白处右键,选择git bash here。#打开git并进入当前路径。
git init #初始化,当前文件目录下会生成一个.git的隐藏文件夹。此文件夹及生成本地仓库并配置完成。
git config --global user.email "这里写本身邮箱" 本地git配置邮箱,跟码云无关。
git config --global user.name "这里输入名字" 本地git配置用户名,跟码云无关。
git add . 这个命令是存档当前对本地仓库文件的增删改操做到本地的git配置记录里。
git commit -m "这里写备注信息,随便填" 这个命令是针对刚才的add.的内容放到本地仓库并备注信息。
git remote add origin https://gitee.com/old_boy_python_stack_23/19052823038.git 此命令是将本地仓库和后面的网址远程仓库对接在一块儿。其中remot是命令,origin是自定义的仓库名。
git push -u origin master 推送本地仓库内容到远程仓库使两个仓库同步。
git pull origin master 从远程仓库拉下来远程仓库的增删改动做。
Issues 从组织当中点这个,而后执行。执行完以后在评论区回复完成进度。完成数/总数的形式。哪一题没完成,什么理由写清楚。天天睡觉前把本地写的代码跟码云同步一下。
<div style="text-align: right;"><a name="_label1"></a> <a href="#_labelTop">返回顶部</a></div>
tab键建立子图,双击写内容,del删除。其余功能慢慢探索。
https://www.cnblogs.com注册,申请开通博客。在选项里选择默认编辑器markdown。markdown里有导出png,而后直接上传,能够减小上传多个图片的问题。
cpu 中央处理器,运算速率最快
内存 临时快速存储,断电即消失,是cpu和硬盘的中介。
硬盘 长期存储数据,速度相对慢
操做系统:是一个特殊软件,调配硬件资源来支持其余软件的需求。
云计算,web开发,人工智能,系统运维,爬虫,金融辅助,图形gui,游戏。
google,
3python是一个什么样的语言
编译型:只翻译一次就到机器语言。C,C++
优势:运行速度快
缺点:开发效率低
解释型:一句一句的翻译到机器语言。PY,PHP
优势:开发效率高
缺点:运行速度慢
混合型:Java,C#
4python的优缺点
可移植性 跨操做系统,跨平台兼容
可扩展性 某一段须要速度快或加密的能够用C来写加进去。
可嵌入性 能够在C或C++里嵌入使其具有脚本功能。
python的种类
Cpython 官方版,使用C写的。
Jython Java版本
IronPython C#实现的
PyPy 用python实现python,运行速度快。将来可能爆款
文本文件,保存时,另存为utf-8文件类型。
print是排bug神器
print('hello world')
书写格式a = 1
新建变量a #能够用 a=''来新建一个空的字符串类型的变量。
把1赋值给变量a
变量类型由=右边的数据类型决定
变量命名规则:
字母_下划线,数字三种组合且不能以数字开头
不能是python的关键字,例如print,input等等
不建议用中文和拼音
能够区分大小写
要右意义
驼峰体:AbcDef,下划线分割体:(官方推荐)abc_def
常量:纯大写字母和下划线组成的,常量也是变量,但一般约定不修改。
注释
#单行注释 ,每行#后面的内容是为这一行作注释。
批量注释,选中要注释的大批内容,Ctrl+?键能够批量注释,效果等同于每一行开头加一个#。
字符串批量伪注释法:用两组三个’‘’单引号‘’‘,或两组三个“”“双引号”“”引发来。这样会使其中的内容变成字符串,若是这个字符串不调用,则会一直闲置,至关于被注释。三个引号有些特殊状况也会用到,注意用这个备注时要注意。
用户输入input
input("这里是提示语可无")
import getpass ,输入时不显示 。
在input外面定义类型,无定义时默认是字符串。好比int(input("这里拿到的数据若是能够转换成整形,则转换,若是不能则报错"))
print(type(查看这里数据的类型并输出结果)),也能够用type(str)==str来作判断语句。
书写格式
if 3>2:
代码块
单纯选择,条件不知足可跳过
if 条件:
缩进:成立执行
不成立跳过
二选一,必须执行一个
if 条件:
缩进:成立执行。
else :
缩进:不成立执行
多选项可不选,if elif elif 多条件可不执行
多选项必选其一,if elif elif elif else多选必选一个
嵌套IF
if条件:
缩进:上面成立再次if条件:
再次缩进:上面成立执行
占位符方式
“%s%d%i”%(a,b,c) 最基础的格式,在定义字符串时,%表明占位符,s为给这个占位符指定数据类型为str,d和i指定为整形。再在字符串后紧挨着书写%(),括号内根据前面字符串的占位符数量和次序以及数据类型依次一一对应填充内容。
这里的字符串能够用变量代替。
n = “%s%s%s%s%s”
print(n%(a,b,c,d,e))
f"{}"方式。此方式最简洁方便,可是3.6版本才开始有的功能,建议先不用,工做中可能遇到3.6如下版本工做?
n = 1
m = 2
num = f"{n}+{m}={m*n}"
print(num)
1+2=2
f做为头标,表示接下来的这个字符串我能够用占位符,而后直接在字符串内容中用{变量或其余}拼接其余字符串。
fomat
while 条件 :
代码块,成立则执行并持续循环直到不成立往下走
while 条件: 代码块 break,退出并结束break所在的循环。 continue 退出本次循环并继续下一次循环条件判断。 else:当while不是被break结束的时候,即正常条件判断不成立时结束的状况下,执行这里。
算数运算符
+加,-减,*乘,/除,//除取整,%除取余,**指数
赋值运算符
=直接赋值,+=1原值+1赋为新值,-=1,*=,/=,//=,%=,**=
比较运算符
==等于,>大于,<小于,>=大于等于,<=小于等于,!=不等于
成员运算符
in 在里面,not in 不在里面。
逻辑运算符
not不是,not在这里最高优先级。and而且,和,与的意思,第二优先级。or或者,最低优先级。
print(num.bit_length()) 求十进制的数字转换成2进制时的位数。
boll,布尔值,True 真 False假
print(bool())输出后面括号内容的布尔值。
boll(input())取输入内容的布尔值。
数字0是False,其余数全都是True。
“”两个引号间没内容的空字符串,布尔值是False,有内容的都是True
print(int(False))输出的是将布尔值整形化,结果是0. print(int(True))的结果是1
print(str(True))把布尔值转换成字符串至关于“True”,同理“False”
字符串用于存储数据的。用引号引发来的是字符串,‘ ’两组单个单引号,“ ”两组单个双引号,‘’‘ ’‘’两组3个单引号,“”“ ”“”两组3个双引号
下标(索引)name = “meet” print(name[2]),从左向右开始数,从0开始按01234的顺序数。这个print取的值是meet当中第三个字母,就是右边的e。
print(name[-3]),这里加了-号,就是从右往左数,一样是012345这样数。
切片
name = “abcdefghijklmnopqrstuvwxyz”
print(name[5:-3])这里取的值是从第5位开始取下一位,取到右数第3位的前一位。
print(name[0:10:4]) 0是起始位,10是终止位,4是步伐,每4位取一次数。步长位不写默认位1。起始位和终止位。步长位默认1,且是从左往右跳。
起步位若是在后面,结束位在前面,也是能够的,但必定要注意方向。
步长7
字符串经常使用的方法
大小写转换
upper 全部字母变为大写
lower 全部字母变为小写
swapcase()大小写互换
casefold 转换小写,覆盖的内容比lower更普遍,好比德语字母
title 把每一个单词的首字母变为大写,以非字母隔开视为单词
s.capitalize()首字母大写,整个字符串的第一个字母变成大写.
切来切去
center(20,*)把字符串拉长并用星号扩充,原字符串填充在中间,单个的星号优先在左边.
strip() 去掉两边的空格,空白,换行符制表符等.括号内也能够输入其余内容
rstrip去掉右边的空格空白
lstrip去掉左边的空格空白
name.replace('n','s',2)#将name里的面n替换成s,默认所有替换,可加,个数,从左往右换n个。
split()#将name以括号内容切割成多个部分。()内的内容会损失掉,返回的结果是一个列表.默认是用空格切.
若是字符串内没有要切割的内容,切割结果是将这个字符串转换成一个列表
若是字符串切割部分在开头或结尾,切出来的列表会有一个空字符串作元素
若是字符串切割部分就是字符串自己,那么切出来的列表是两个空字符串元素.
格式化输出
s1 = "我叫%s,我今年%s岁了,我喜欢%s"%("名字","年龄","爱好")
s1 ="我叫{},我今年{}岁了,我喜欢{}".format("名字","年龄","爱好")
s1 ="我叫{0},我今年{2}岁了,我喜欢{1}".format("名字","年龄","爱好")#这里能够用索引下标指定位置精准替换
s1 ="我叫{name},我今年{age}岁了,我喜欢{hobby}".format(name="名字",age="年龄",hobby"爱好")用这个更清晰直观,但须要多输入内容.
查找
print(name.startswith('a'))#name是不是a开头。返回结果是bool值
print(name.endswith('i'))#name是不是i结尾。返回结果是bool值
name.count('z')#name里有几个z,计数
s.find 找位置,若是能找到,是报查找内容的第一个字符的索引下标返回.若是找不到,返回-1.
s.index 找索引,若是能找到,返回查找内容的第一个字符的索引下标,找不到则报错.
条件判断
is.alnum()是否只由字母,数字,中文组成
isalpha()是否只由字母和中文组成.
isupper()是否有大写字母而且没有小写字母,其余中文和符号无视.
islower()是否有小写字母而且没有大写字母,其余中文和符号无视.
isdigit()是否由纯数字组成.①这种符号也会被认位是数字,但没法int使用.会报错
isdecimal()10进制阿拉伯数字,这个最经常使用.
isnumeric()阿拉伯数字,中文大写数字,中文小写数字均可以.壹贰叁肆伍陆柒捌玖拾
长度 len(字符窜或变量名),len()是内置函数,能够直接用.当一个数字用.len的括号内能够是空字符串,但不能没东西.也就是说len最小为0.
计数 s.count("")
s = range(1,10) 取头不取尾.从1取到9.取不到10.
print(s) range(1,10) 输出的是range(1,10)自己这个格式.
print(list(s))输出的是[1,2,3...,9]这个列表.
定义:
能装对象的对象. []中括号,内每一个元素以括号隔开,单一元素须要有逗号,没有元素能够为空.
li = list("1234")迭代定义列表.
索引和切片
[start:end:step]
列表操做
反转 li.reverse(),把列表反过来放.
升序 li.sort(),
降序 li.sort(reverse=True)
增长元素
append()追加末尾
insert(索引值,内容)指定位置添加
extend()扩展添加,可迭代对象,迭代里面每一个元素进列表.
合并[]+[]
删
pop()默认删除指定位置,能够指定位置,有返回值.
remove()元素名称删除
del索引,切片删除
clear清空
改
li[索引] = 内容
li[切片] = 步长为1是,切片2个以上元素,添加内容能够任意数量. 步长不为1时,元素数量须要一一对应.
查:索引,切片,步长,for循环,while循环. li.index('查找内容')
join, "_".join(li),用下划线把后面的可迭代对象连接起来.
tuple, 小括号包起来,元素间逗号隔开.定义
tu = tuple("12345"),迭代字符串定义.
不能修改.
tu.count('3')元组中3的数量
tu.index('1')元组中第一个1的位置.
定义
关键字dict,大括号{}包涵,键值对."键":"值"
dict(k=1,k1=123,k2='aa'),定义字典.
dic = dict.fromkeys(可迭代对象,任何内容),迭代第一项作键,后面内容作全部键的值.
键:必须可哈希(不可变的数据类型),而且是惟一的. 字符串,数字,元组. 不能是列表. 字典自己是可变的.
值:任意
不一样的键之间是无序的,相同的键根据时间前后,后面键的内容直接覆盖前面的.
dic = {'a':'b','b','c'}
增:
dic.setdefault('c','aaa'),添加的键若是不在字典里,新加进去.若是在字典里,不进行任何操做.
dic['s'] = 'ssss',添加新的键值对.
dic.update({1:2,"a":"a1"}) ,有就改,没有就加.
删:
dic.pop('a') ,pop有返回值,为被删除值.
del dic[键],后面不加是直接删.
dic.clear 清空
改:
dic['b'] = '值',跟增同样的写法.有就改,没有就增.
dic.update({1:2,"a":"a1"})
查:字典的查询只能经过键获取值,不能经过值获取键.
print(dic['c'])若是有键就返回键所对应的值,若是没有就报错
print(dic.get('a','若是没有就返回这里的内容,不写默认返回None'))
其余操做
dic.keys 获取键
dic.values()获取值
dic.items获取键和值,出来的是多个元组,每一个元组对应一个键值对.
print(id(a)),输出a的内存地址.
enumerate(dic,1)枚举,第二个参数是起始数,默认0,能够本身写.
字典的做用
存储大量数据,相对来讲,比列表更适合存大量数据.
字典的查找比较便捷,由于键值是本身编辑的.
数据之间能够关联
字典比较消耗资源
代码块:一个类,一个模块,一个函数,
在CMD终端中,每一行代码就是一个代码块.
小数据池int支持范围 -5 -- 256,不一样代码块之间用范围内数字时也是一样的地址. 在相同代码块时,全部值相等的内存地址也同样.
is是判断内存地址是否相同,==是判断值是否相同.
字符串:
字符串作乘法的时候结果的长度在20之内,地址同样.长度超过20,进行驻留
本身定义的字符串,若是仅由字母,数字,下划线组成,不限制长度.包含其余内容的,驻留.
特殊字符(中文除外)定义1个的时候符合小数据池.超过1个驻留.
布尔值,True和False两个驻留.
定义
集合{1,2,3,False,(1,2,3)},无序,可变,元素不会重复,重复时只留一个,元素是不能变的可哈希的.
s = set ('1234')迭代建立集合.
增
s.update()迭代添加
s.add()添加内容
删
del s 删除整个集合
s.clear 清空
pop()随机删除1个
remove(指定元素删除)
改 没有直接改的方法,先删掉一个,再添加一个.就能够达到修改的目的了.
集合能够用len()计数.
s1 - s2 差集
s1 | s2 并集
s1 & s2交集
s1 ^ s2 差集合并,反交集.
s1 > s2 包含而且至少多一个元素
s1 < s2 被包含而且至少少一个元素.
frozenset({1,2,3,4,5})冻结集合. 冻结后的集合,是不可变得.
集合主要用于去重复.
list(set(li))从列表转换成集合再转换回列表,就去掉重复项了.但须要注意的是,返回的列表可能顺序跟原来的不一样.
对比赋值,浅拷贝,深拷贝的区别.
赋值:变量名不一样,但变量地址同样,指向地址也同样,指向的内容也同样.
int整形,str字符串,bool布尔值,list列表,tuple元组,dict字典,set集合.
int str(int)转换成字符串. int不能直接转换成列表,字典,集合,元组.
str
转换成int,str必须是阿拉伯数字,int(str)
str转list
li = list(str) 把字符串里的每个字符,按顺序变成列表里的元素.
str.split() 切割转,
为空时,或括号内内容在字符串中不存在时.把整个字符串做为一个元素组成一个单元素列表.
括号内内容在字符串中存在时,这个值换成列表中的逗号,其余被这个值(逗号)隔开的内容变成元素.逗号两边或某一边没有内容时,用空字符串''代替元素.(就是说若是这个值在两边,那么就会多一两个空元素)
list转str
str(list),把整个列表两边套上引号,变成总体字符串,包含其中的方括号,元素,逗号等等全部内容.
('字符串').join(列表),注意这个格式,是用字符串去连接列表的每一个字符串元素. 字符串内容能够为空,也能够是任意字符串. 列表内只能由字符串元素组成.由数字或列表嵌套,等等会报错.
str转tuple tuple(str),迭代添加字符串中每个字符到元组中
tuple转str str(tuple)将整个元组变成要给字符串,同列表. 能够先把元组转成列表,而后用join命令去处理.
str转dict 字典比较特殊,每一个元素要两个值,没有直接转换的方式.能够经过批量建立命令,
dic=dict.fromkeys(str,值) 这里会迭代str把每一个字符变成键,他们共享一个值. 注意这个值若是是可变类型,那么一个变其余的也跟着变.
dict转换str str(dict),总体变成字符串. 能够经过dic.keys()把keys拿出来作成高仿列表以后join拼接变成字符串,经过dic.value把值拿出来作成高仿列表以后join拼接变成字符串.
str转set set(str)直接迭代字符串内容添加到集合中.
set转str str(set)整个转. 可让set变成列表后作join操做.
s = '编码,解码' encode()编码,decode()解码
s1 = s.encode("gbk")
f = open("文件路径文件名扩展名",mode="r打开模式",encoding="UTF-8编码集")
content = f.read() 读取内容,默认所有读取,可填写读取字符数,注意换行符也计数.
line1 = f.readline() 读取一行内容,注意换行符,可line1 = f.readline().strip()去掉换行符
line2 = f.readline() 跟上一行代码连在一块儿就是读取下一行,由于光标移动了.
content = f.readlines() 读出来以行为单位,每行作为一个元素.造成一个列表.
f是一个可迭代对象,由于是大字符串.
for line in f:
print(line)
打印出来的是每一行
f.close()关闭,一般操做完文件要关闭.
f.tell返回光标当前位置,按字节算.
with open(文件路径,mode,encoding) as f,\open(文件路径,mode,encoding) as f1
import os
os.rename("原名","新名")
os.remove('文件名')删除这个文件.
globals()查看全局做用域中的内容
locals()查看当前做用域中的内容
goobal 在局部引入全局变量
nonlocal在局部,引入离他最近的某一层的局部变量. 引不到全局变量.
<function func at 0x000001AE9D4F2EA0>出现相似这样的结果,是指引用的变量是个代码地址,后面加个括号能够直接引用代码地址里的内容.
iter(li)把列表li变成要给生成器.
eval剥去字符串的外衣,返回本质.这个本质必须是数字或变量名等等能够单独存在的.不能用的剥出来会报错.
exce 把字符串里面的内容当代码来运行..这段代码必须符合语法,能够是空,变量名等,但不合语法就会报错.配合使用,能够剥开两层.
print(ret.__code__.co_freevars)ret是个疑似闭包的函数,后面获取自由变量函数.
下面结果有自由变量,就是闭包.
def func():
print('这是原函数主功能')
def warpper(f):
def inner():
f()
print('这是在原函数的基础上,加的新功能')
return inner
func = warpper(func)# 新的func变成了原func没有改变任何源码的基础上,加了warpper功能.
#若是没有inner新这一层定义函数,那么在定义新func的同时,就执行了旧func,改变了旧func的状态.
func()#此时的新func没有改变代码,没有改变调用方式和调用状态.执行完原功能后还能执行新功能.
系统日志:记录服务器的一些重要信息:监控系统,cpu温度,网卡流量,重要的硬件的一些指标,一般是运维人员用的. 记录操做指令
网站日志:访问异常,网站各板块的访问量,点击率,等等.蜘蛛爬取次数等.
辅助开发日志:开发人员在开发项目中,利用日志进行排错,排除一些避免不了的错误(记录).辅助开发.try,
记录用户信息的日志:大数据.消费习惯,新闻偏好,等等(数据库解决)
Low版(简易)
标准()
旗舰(开发使用)
提供特殊的数据类型
安装 pip3,
有行数提示.而且行数能够供后续操做这一行的代码
tab键自动补全 list.ap 此时按tab键会补全list.append, list.此时按tab键,会把全部方法列出来供选
cd,cd..等命令,能够打开文件位置,仿照cmd的命令.
!加cmd命令,可直接执行cmd的命令
# 模糊搜索等功能
list.*pp*? #自动补全为list.append
a.__*__? #自动弹出全部双下方法供选择
a? #打印a的大小,数据类型,内容
def func(a):
print(a)
#func? 打印类型,
#func?? 把代码打印出来,以及
经常使用快捷键
Ctrl-P或 上箭头 后向搜索命令历史中以当前输入的文本开头的命令
Ctrl-N或 下箭头 前向搜索命令历史中以当前输入的文本开头的命令
Ctrl-R 按行读取的反响历史搜索(部分匹配)
Ctrl-Shift-V 从剪贴板粘贴文本
Ctrl-C 终止当前正在执行的代码
Ctrl-A 光标移动到行首
Ctrl-E 光标移动到行尾
Ctrl-K 删除从光标开始至行尾的文本
Ctrl-U 清楚当前行的全部文本
Ctrl-F 或左箭头将光标向前移动一个字符
Ctrl-b 或右箭头 将光标向后移动一个字符
Ctrl-L 清屏
%run test.py 这里能够直接运行py文件
%paste 命令,打印并执行剪贴板里的代码.
li = [random.randint(1,1000000) for i in range(10000)] %timeit li.sort() #上两行代码运行结果195 µs ± 61.7 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each) 结果为195微秒上下波动61.7微秒之间, 运行了7轮,每轮运行1万次.得出来的结果范围. a=1 b=2 %timeit a+b #结果49 ns ± 2.88 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) 49纳秒上下波动2.88纳秒. 运行了7轮,每轮100万次.得出的结果范围.
%pdb on #打开调试模式开关 %pdb off 关闭调试模式开关.
调试模式下, 运行代码会在报错前停住,以后提示哪里即将报错.可查看代码中指向到当前时的各个变量的值,以便排查错误.
a = 1 b = 2 a+b #这里显示3这个结果打印但没保存 若是用c=a+b保存但不打印 a*b #这里显示2 我须要用到上面的3和2的时候,能够用一个_表明上一个结果.__两个下换线表明上两个.___三个下划线表明上三个结果. _69 一个下划线加一个行数,是对应行数的输出结果.若是69没有输出,会报错.
目录标签系统
%bookmark
cmd模式下,打开jupyter-notebook.exe 能够打开一个网页版的ipython,在这里能够编写博客等内容.提供代码执行并输出功能.提供画图等功能.
a = np.array(b) 将一个列表b变成一个np列表a
这个np列表叫作数组,数组内的元素类型须要统一,不能有不一样类型.数组设定好以后,元素个数就不能变了,能够改变值,但个数不能变.
import numpy as np import random a = [random.uniform(100.0,200.0) for i in range(50)] a = np.array(a) x = 6 a * x #这个np列表能够直接用数学运算符求对应的np列表. b = [random.uniform(10,20) for i in range(50)] a*b #能够将两个数组对应位置相乘后获得新的数组 (a*b).sum()还能求和
adtype判断a的类型,a.size是元素个数.
a = np.array([[1,2,3],[4,5,6]]) #二维数组 a.shape#返回(2,3) 两行三列. a = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]) #三维数组 a.shape #返回(2,2,3) a.T #转置,横变竖,竖变横. a.ndim#列数 np.zeros(10)# array([0.,0,....,0.])浮点数数组 a = np.zeros(10,dtye='int') #上一行结果相同,整形 a = np.ones(10)# 十个1.0组成的数组 a = np.ones(10,dtye='int')#十个1组成的数组 a = np.empty(100)#一百个空数组成的数组,但这100个空数,有值. 是上一次这个内存残存的值.
np.arange(2,10)#2到9 np.arange(2,10,2)#步长为2 np.arange(2,10,0.3)#步长0.3,这个列表长度就会很长了. np.linspace(0,100,100)#分红100个数,从0到100的等差数列.
快速生成2维或3维数组
np.arange(15).reshape((3,5)) #结果是3*5的二维数组 array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]])
索引,对照上面最后的
array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]) a[0][0] #索引出第一行第一列的0.
切片
一: 一维数组,普通列表切法也能切. 惟一区别,np切片是浅拷贝. 列表第一层切片是深拷贝,二层是浅拷贝. 深拷贝,用c = a[0:4].copy() 二: 二维数组 array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]) a[0:2,0:2]切出来的是,逗号左边是行,右边是列. 0 1 5 6
布尔型索引
a = [3, 3, 6, 2, 3, 2, 2, 1, 6, 2, 7, 6, 10, 5, 10, 4, 2, 8, 1, 1] list(filter(lambda x:x>5,a)) a = np.array(a) a[a>5]