2019-04-10 20:02:19 weixin_41624982 阅读数 121
  • Python-数据

    Python数据库编程视频教程,数据库是MySQL,讲解Python链接MySQL数据库,并对数据库进行增删改查操作。

    10902 人正在学习 去看看 尹成

线性数据中的典型顺序表和链表已经讲完:

顺序表数据结构在python中的应用

python实现单向链表数据结构及其基本方法

python实现单向循环链表数据结构及其方法

python实现双向链表基本结构及其基本方法

python实现双向循环链表基本结构及其基本方法

python实现堆栈数据结构及其基本方法

Python实现双端队列数据结构及其基本方法

下面将说图形结构中的典型数据机构:树;是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。

image

image

树的一些基础概念:

  • 节点的度:一个节点含有的子树的个数称为该节点的度;
  • 树的度:一棵树中,最大的节点的度称为树的度;
  • 叶节点或终端节点:度为零的节点;
  • 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
  • 树的高度或深度:树中节点的最大层次;
  • 森林:由m(m>=0)棵互不相交的树的集合称为森林;
  • 路径:对于一棵子树中的任意两个不同的结点,如果从一个结点出发,按层次自上而下沿着一个个树枝能到达另一结点,称它们之间存在着一条路径

常用树的分类:

无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也称为自由树;

有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树;

二叉树:每个节点最多含有两个子树的树称为二叉树;

完全二叉树:对于一颗二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树,其中满二叉树的定义是所有叶节点都在最底层的完全二叉树;

平衡二叉树(AVL树):当且仅当任何节点的两棵子树的高度差不大于1的二叉树;

排序二叉树(二叉查找树(英语:Binary Search Tree),也称二叉搜索树、有序二叉树);

霍夫曼树(用于信息编码):带权路径最短的二叉树称为哈夫曼树或最优二叉树;

B树:一种对读写操作进行优化的自平衡的二叉查找树,能够保持数据有序,拥有多余两个子树。

树的储存:

在python中一切皆对象,树也不列外,树在python中可以通过列表和链表来储存。通过列表是将每个节点对象储存,在逻辑上不过形象,基本不用;用的最多的是通过链表构建一个树对象,其基本属性是根节点,根节点的左树属性和右树属性连接不同的节点,依次构建一颗庞大的树。

class Node(object):
    """节点类"""
    def __init__(self, elem=-1, lchild=None, rchild=None):
        self.elem = elem
        self.lchild = lchild
        self.rchild = rchild

class Tree(object):
    """树类"""
    def __init__(self, root=None):
        self.root = root

后面将主要说二叉树、平衡二叉树、红黑树及其相关的一些重要方法的python实现。

2019-03-15 21:40:45 qq_38183592 阅读数 112
  • Python-数据

    Python数据库编程视频教程,数据库是MySQL,讲解Python链接MySQL数据库,并对数据库进行增删改查操作。

    10902 人正在学习 去看看 尹成

Python操作三大数据库

在我们用Python语言开发软件时会经常用到三大数据库去存储数据:Mysql,MongoDB,Redis;
作为复习今天重新写一遍方便日后复习Python操作各大数据库的方法用法;

Python操作Mysql

DDL(数据库定义语句)

    create table/database
    alter   table/database
    drop   table/database

DML(数据管理语句)

insert 	新增
delete	删除
update	修改
select	查询

在python2中,连接Mysql的库大多是使用MySQLdb,但是此库官方并不支持Python3,所以我们用PyMySQL
直接 pip install pymysql 即可

import pymysql

db = pymysql.connect(host='localhost',port=3306,user='root',password='12345')   # 连接mysql,声明一个连接对象db
cursor = db.cursor()    # 获取操作游标
cursor.execute('select version()')# 查询数据库版本,返回的是查询到的数量
# version = cursor.execute('select version()')    # 使用游标执行sql语句
data = cursor.fetchone()    # 获得第一条数据,也就得到了版本号
print(data)

----------------------------------结果
('5.7.17-log',)

查询数据库:

cursor.execute('show databases')
databases = cursor.fetchall()	# fetchall()方法获取所有结果,元组的形式
print(databases)
----------------------------
(('information_schema',), ('dailyfresh',), ('hive',), ('ihome',), ('images360',), ('lagou',), ('movie',), ('mxonline',), ('mysql',), ('news',), ('performance_schema',), ('solar',), ('sougou_data_result',), ('spiders',), ('student',), ('sys',), ('testdjango',))

创建数据库:

cursor.execute('create database test_Mysql default character set utf8')# 创建数据库,使用默认utf8编码

创建表:
在创建完数据库test_Mysql后,我们想要使用该数据库只需要在链接时多制定一个db参数即可

import pymysql

db = pymysql.connect(host='localhost',port=3306,user='root',password='12345',db='test_Mysql')
cursor = db.cursor()    # 获取操作游标
# 创建表
sql = '''create table if not exists students (id varchar(15) not null, name varchar(255) not null, age INT not null, primary key(id))'''
cursor.execute(sql)
db.close()

插入数据

id = '20120203'
name = 'Li'
age = 18
sql = '''insert into students(id,name,age) values(%s,%s,%d)'''  # 格式化字符%s代替value值
try:
    cursor.execute(sql,(id,name,age))# 第一个参数传入sql语句,第二个参数传入value值,用元组的方式
    db.commit() # 提交事务
except:
    db.rollback() # 错误回滚
db.close()

事物的四个属性:

属性 解释
原子性 事务是一个不可分割的工作单位,事务中包括的注入操作要么都做,要么都不做
一致性 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。举例来说,假设用户A和用户B两者的钱加起来一共是1000,那么不管A和B之间如何转账、转几次账,事务结束后两个用户的钱相加起来应该还得是1000,这就是事务的一致性
隔离性 隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。关于事务的隔离性数据库提供了多种隔离级别
持久性 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
--------- ------------------------------

插入,更新,删除操作都是对数据库进行更改的操作,而更改操作偶必须为一个事务,所以这些操作的标准写法就是:

try:
	cursor.execute(sql)
	db.commit()
except:
	db.rollback()

插入数据还可以利用 dict 字典的形式
实现动态插入,这种方式对于***Python爬虫数据采集***很方便

data = {
	'id': '123456',
	'name':‘ligang’
	'age':20
} 
table = 'students'
keys = ','.join(data.keys())
values = ','.join(['%s']*len(data))
sql = 'insert into {table}({keys}) values ({values})'.format(table=table, keys=keys,values=values)
try:
	if cursor.execute(sql, tuple(data.values())):
		print('Successful')
		db.commit()
except:
		print('Filed')
db.close()

更新数据

sql = ‘update students set age = %s where name = %s’
cursor.execute(sql, (20,'Bob'))

查询

sql = 'select * from students where age>=20'
print('row count:', cursor.execute(sql))
cursor.fetchone()	# 获取一条
cursor.fetchall()	# 获取剩余全部 ,二重元组的形式,如果数据量大,内存开销便会增大

Python操作MongoDB

  1. 连接MongoDB
from pymongo import MongoClient
from datetime import datetime
# 方式1
# client = MongoClient()
# 方式2
# client2 = MongoClient('localhost',27017)# ip, 端口
# 方式三
# client3 = MongoClient('mongodb://localhost:27017')# 直接传入字符串mongodb开头
# print(client2.HOST)
# print(client.list_database_names())
# client.close() # 关闭依然可以用。自带线程池 当重新访问 数据库会自动连接
# print(client.list_database_names())
  1. 操作增删改查
**  ****** 将连接封装成为类,用面向对象的方式去调用方法 *****   **
class TetMongo(object):
    def __init__(self):
        self.client = MongoClient()  # 建立连接 默认本地
      #  self.db = self.client['test'] # 没有自动创建
        self.db = self.client.test   # 链接数据库 和上边一样
    def add_one(self):
        """新增数据"""
        student = {
            'id': '135136',
            'name': '老李',
            'age': '22',
            'gender': '男',
            'time': datetime.now() # 自动添加字段,这个时间可以用原生的python时间不需要加处理
        }
        return self.db.students.insert_one(student)
        # 除了插入一条之外 insert插入多条采用【{stu1},{stu2}】列表嵌套字典的方式
        # save() 也可以保存多条,但是要遍历列表 速度慢
    def get_one_from_id(self,stu_id):
        '''查询指定id的数据'''
        return self.db.students.find_one({'id':str(stu_id)}) # 查找一条 find_one
    def get_more_from_gender(self,gender):
        '''查询多个性别为男的数据'''
        return self.db.students.find({'gender':str(gender)})  # 查找多条 find

    def find_all(self):
        return self.db.students.find()  # 直接调用不传参数 默认查找该集合全部数据

    #    (>)  大于 - $gt
    #    (<)  小于 - $lt
    #    (>=)  大于等于 - $gte
    #    (<= )  小于等于 - $lte
    # 例:查询集合中age大于25的所有记录
    # for i in my_set.find({"age": {"$gt": 25}}):
    #     print(i)
    def update_from_id(self):
        rest = self.db.students.update_one({'name':'老王'},{'$set':{'gender':'女'}})
       # rest = self.db.students.update_many({},{'$set':{'gender':'女'}})
        print(rest)
    def remove(self):
        # return self.db.students.delete_one({'id':str(id)}) # 删除一条
        return self.db.students.remove() # 删除所有记录
        # return self.db.students.remove({'name':'老王'})
def main():
    obj = TetMongo()
    # result = obj.add_one()
    # print(result.inserted_id)

    # result = obj.get_one_from_id(123415)
    # print(result)
    #
    result_list = obj.get_more_from_gender('男')
    for res in result_list:
        print(res)

    # all_stu = obj.find_all()
    # for res in all_stu:
    #     print(res)
    # # obj.update_from_id()
    #
    res1=obj.remove()
    print(res1)
if __name__ == '__main__':
    main()

Python操作Redis

下一篇专门深入理解Redis

2017-09-09 16:59:38 qq_36783142 阅读数 314
  • Python-数据

    Python数据库编程视频教程,数据库是MySQL,讲解Python链接MySQL数据库,并对数据库进行增删改查操作。

    10902 人正在学习 去看看 尹成

python的五大数据类型
整数
浮点数
布尔值
空值
字符串
如果字符串中,既有单引号又有双引号,则需要引用转义符(\) ,表示 为
print ‘I\’m \”ok\”!’
在python中,字符\本身也需要转义,则\表示字符串\
在字符串内部,%s表示用字符串替换,%d表示用整数替换。有几个%?占位符,后面就跟几个变量或者值,顺序要对应好
print ‘Hi,my age is %d,I have %s! %(10,’apple’)’
常见的占位符 有
%d,整数
%s,字符串
%f 浮点数
%x 十六进制整数
变量
1.在Python中,常亮通常用全部大写表示,这规范化了代码
2.整数的除法计算出来的结果也是整数,如果你需要精确的除法,只需要把一个数改变成浮点数就行了

10.0/3
3.33333333
3.python还提供一个余数运算,即两个整数相除得到的余数
10%3
1
小结
python支持多种数据类型,在计算机内部,可以把任何数据都看成一个对象,而变量就是在程序中用来 指向这些数据对象的,对变量赋值就是把数据和变量给关联起来

2019-03-16 18:21:05 MarinNo 阅读数 24
  • Python-数据

    Python数据库编程视频教程,数据库是MySQL,讲解Python链接MySQL数据库,并对数据库进行增删改查操作。

    10902 人正在学习 去看看 尹成

python中的数据数据类型

int(整形)

整型在Python中的关键字用int来表示; 整型在计算机中是用于
在python3中所有的整数都是int类型. 但在python2中如果数据量比较大. 会使用long类型.
在python3中不存在long类型 整数可以进行的操作:加(a + b)、减(b - a)、乘(a * b)、除(b / a)、整除(b // a)、取余(a % b)、次方(幂)(a ** b)

bool(布尔值)

python语法 人类语言 计算语言
Trur 真 1
False 假 0

字符串(str)

字符串, 可以保存少量数据并进行相应的操作
字符串加a = '世界' b = '你好' print(a + b) 结果: 世界你好
字符串乘

`a = '坚强'
print(a * 8)
结果:
坚强坚强坚强坚强坚强坚强坚强坚强

索引(下标):从0开始
切片:[起始位置:终止位置]
步长`:[起始位置:终止位置:步长]
操作:全部大写.upper()
全部小写:.lower()
首字母大写:.capitalize()
大小写转换:.swapcase()
什么开头:.startswith(‘a’)
以什么结尾:.endswith(‘x’)
统计出现的次数:.count(‘元素’)
查找下标:.find(‘元素’)
字符串替换:.replace(‘旧元素’,‘新元素’)
去除头尾两边的空格:.strip()
分割:.split(")
字符串格式化:.format(’’)
is系列
判断是不是阿拉伯数字:.isdigit()
判断是不是数字和字母:.isalpha()
获取长度:len()

列表(list)

列表是python的基础数据类型之一 ,列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,64位python的限制是 1152921504606846975 个元素。而且列表是有序的,有索引值,可切片,方便取值.
列表的索引:列表和字符串一样也拥有索引:列表是可以进行修改的,这里和字符串不一样
列表的切片:lst = ["好心人", "王自理", "马天下", "周润发", "向华强"] print(lst[0:3])#[“好心人”, “王自理”, “马天下”]
列表的增删改查

2015-03-16 12:26:31 u013299077 阅读数 295
  • Python-数据

    Python数据库编程视频教程,数据库是MySQL,讲解Python链接MySQL数据库,并对数据库进行增删改查操作。

    10902 人正在学习 去看看 尹成

从今天起开始学习python。


python基本数据类型学习笔记

python中的基本数据类型有整形,浮点型,字符串,布尔值,空值
ython可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。
浮点型就是小数
字符串是使用''或""括起来的文本
布尔值只有两个,分别是True和False(注意大小写),代表真与假
空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值


print语句可以向屏幕上输出指定的文字。比如输出'hello, world'
print('hello, world')
print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出:

print('a','b','c') print会依次打印每个字符串,遇到逗号“,”会输出一个空格

可以使用'+'将多个字符串连起来

print('abc'+'f'+'bb')

如果需要打印多行字符串,可以使用'''...'''

print('''dfg

dfg

ghh''')



任何时候,我们都可以给程序加上注释。注释是用来说明代码的,给自己或别人看,而程序运行的时候,Python解释器会直接忽略掉注释,所以,有没有注释不影响程序的执行结果,但是影响到别人能不能看懂你的代码。
Python的注释以 # 开头,后面的文字直到行尾都算注释


在Python程序中,变量是用一个变量名表示,变量名必须是大小写英文、数字和_的组合,且不能用数字开头
在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量
这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。


字符串可以用''或者""括起来表示。
如果字符串本身包含'怎么办?比如我们要表示字符串 I'm OK ,这时,可以用" "括起来表示:
"I'm OK"
类似的,如果字符串包含",我们就可以用' '括起来表示:
'Learn "Python" in imooc'
如果字符串既包含'又包含"怎么办?
这个时候,就需要对字符串的某些特殊字符进行“转义”,Python字符串用\进行转义。
要表示字符串 Bob said "I'm OK".
由于 ' 和 " 会引起歧义,因此,我们在它前面插入一个\表示这是一个普通字符,不代表字符串的起始,因此,这个字符串又可以表示为
'Bob said \"I\'m OK\".'
注意:转义字符 \ 不计入字符串的内容中。
常用的转义字符还有:
\n 表示换行
\t 表示一个制表符

\\ 表示 \ 字符本身


部分内容来源于网络


Python内置数据结构汇总和介绍

博文 来自: TCatTime

Python中的数据结构

阅读数 554

没有更多推荐了,返回首页