文档章节

学习笔记:python常用数据结构

初雪之音
 初雪之音
发布于 2015/10/10 21:48
字数 1168
阅读 157
收藏 11
点赞 0
评论 0

前记

        Python中常见的数据结构可以统称为容器(container),序列(如列表和元组)、映射(如字典)以及集合(set)是三类主要的容器,本篇笔记主要使用python 3版本

一、序列(字符串、列表、元组)

1、字符串

str = "Hello, world!"
print(str)
str = 'Hello, world!\nby Keyven'
print(str)
str = '''存在换行、'、"情况时,
    使用3个单引号\n'''
print(str)    # 存在特殊情况又不想使用转义字符\时

a = 10
b = 20
c = "="
str = "a = %s, b = %s\n and a + b %s %s"    # 在字符串中嵌入值
print(str % (a,b,c,(a+b)))
print("a = %s, b = %s\n and a + b %s %s\n" % (a,b,c,(a+b)))

print('a' * 10)
print( a * 10)
print("\n")

str = '10'
a = int(str)    # 字符串转整型
print(a + 1)
str = "10.5"
a = float(str)    # 字符串转浮点型
print(a / 10)
print("%.1f" % (a/10))   # 字符串格式化

str = None    # 变量为空值
print(str)

 

2、列表

list = ["one","two",2,4]
print(list)
list.append(8)  # 新增元素
print(list[3])
list[0]= 1
del list[1]     # 删除元素
print(list)

mylist = ['a','b','c','d','e','f']
list = list + mylist    # 合并列表
print(list)
for i in range(4,len(list)):    # for结构
    print(list[i])

 

3、元组(不可修改的列表)

fibs=(0,1,2,3)
print(fibs)

list = [4,5,6]  # 列表转元组
fibs = tuple(list)
print(fibs)

print(0 in fibs)    # 判断元素是否存在
print(4 in list)
print(max(fibs))    # 最大值
print(min(fibs))    # 最小值

 

二、映射/字典(Map or Dictionary)

sports = {'Keyven':"Baseball","Michael":"Basketball"}
print(sports["Keyven"])
if "Mike" in sports:    # 判断Key键值是否存在
    print(sports["Mike"])
elif "Michael" in sports:
    print(sports["Michael"])
else:
    print("No Found!")

sports["Maria"] = "Swim"    # 添加键值对
sports["Ooo"] = "Xxx"

print(sports)
del sports["Ooo"]   # 删除键值对

for var in sports.keys():   # map迭代器
    print(sports[var])

 

三、集合(Set)

key = set([1,2,3])
print(key)

list = ['a',1,2,3,4,1,2,3,5,6,7,'a']
key = set(list)   # 筛选掉列表中的副本(重复值)
print("%s\n" % key)

set1 = set([1,2,3])
set2 = set([2,3,4])
set3 = set1 & set2   # 取交集操作
print(set1)
print(set2)
print(set3)
set3 = set1 | set2  # 取并集操作
print(set3)
set3 = set1 - set2  # 两个集合相减
print(set3)
print(1 in set2)
set2.add(1)     # 添加元素
print(1 in set2)
print(4 in set2)
if(4 in set2):
    set2.remove(4)  # 删除元素
print(4 in set2)

 

四、函数使用

def testfunc(name):
    print("Hello, "+name)   # 无返回值

def sum(x):
    s = 0
    i = 0
    while(i <= x):      # while结构
        s = s + i
        i = i + 2
    return s    # 有返回值

testfunc("Keyven")
s = sum(20)
print("2+4+...+20 = " + str(s))     # 数字转字符串

 

五、常用函数

print(abs(-10.5)) # 返回绝对值

for i in range(0,10,2): # 从0开始,以步长为2进行迭代,到10结束
    print(i)

import random
print("random: %s" % random.randint(2,8))   # 产生从2到8之间的随机数[2,8)
      
desserts = ['ice cream','pancakes','brownies','cookies','candy']
print(random.choice(desserts))  # 随机选取
random.shuffle(desserts)    # 洗牌乱序
print(desserts)

import time
print(time.asctime())   # 打印当前时间

import math
print(math.sqrt(4))    # 开根号
print(math.pow(2,3))    # 幂运算

 

六、Python对象class

#!/usr/bin/env python
# by keyven
# student.py

class Student:
	u_id = 0
	name = "--"

	def __init__(self,id):
		self.u_id = id

	def report(self):
		print "%s: No.%d"%(self.name,self.u_id)

	def setName(self,name):
		self.name = name
#!/usr/bin/env python
# by keyven
# main.py

from student import Student

Lisa = Student(1)
Lisa.report()
Lisa.setName("Lisa")
Lisa.report()

 

七、优先队列

数值类型

#!/usr/bin/python
import Queue

nq = Queue.PriorityQueue()

num = [1, 3, 4, 2, 5]
for i in num:
    nq.put(i)

while nq.qsize():
    print nq.get()

自定义class

需要实现__lt__()函数,这样优先队列才能够知道如何对结点进行排序.

#!/usr/bin/python
import Queue
import random

class Node:
    def __init__(self, v):
        self.v = v

    def __lt__(self, other):
        return other.v > self.v

    def __str__(self):
        return "{}".format(self.v)

q = Queue.PriorityQueue()

a = [Node(int(random.uniform(0, 10))) for i in range(10)]
for i in a:
    q.put(i)

while q.qsize():
    print q.get(),
    print " ",

 

八、队列和栈

python列表十分强大,已经完全取代了栈和队列. 下面用List来实现栈和队列

Stack

#!/usr/bin/python

class Stack:
    def __init__(self):
        self.data = []

    def push(self, value):
        self.data.append(value)

    def pop(self):
        if not self.isEmpty():
            self.data.pop(self.size()-1)

    def peek(self):
        if not self.isEmpty():
            return self.data[self.size()-1]
        return 0

    def size(self):
        return len(self.data)

    def isEmpty(self):
        return len(self.data)==0


s = Stack()
a = [i for i in range(1, 10)]
for i in a:
    s.push(i)
print s.size()
while not s.isEmpty():
    print s.peek(),
    print " ",
    s.pop()

Queue

#!/usr/bin/python

class Queue:
    def __init__(self):
        self.data = []

    def append(self, value):
        self.data.insert(0, value)

    def size(self):
        return len(self.data)

    def isEmpty(self):
        return self.size()==0

    def peek(self):
        return self.data[self.size()-1]

    def pop(self):
        if not self.isEmpty():
            self.data.pop(self.size()-1)


q = Queue()
a = [i for i in range(1, 10)]
for i in a:
    q.append(i)

while not q.isEmpty():
    print q.peek(),
    print " ",
    q.pop()

 

九、自定义类排序

对于自定义类排序需要重写__cmp__(self, other)函数

#!/usr/bin/python

class Test:
    def __init__(self, x):
        self.x = x

    def __cmp__(self, other):
        if self.x < other.x:
            return -1
        elif self.x == other.x:
            return 0
        else:
            return 1
    
    def __str__(self):
        return "{}".format(self.x)

a = Test(1)
b = Test(3)
c = Test(2)
li = [a, b, c]
li.sort()
for i in li:
    print i

 

 

 

© 著作权归作者所有

共有 人打赏支持
初雪之音
粉丝 41
博文 245
码字总数 138407
作品 0
广州
程序员
良心推荐:一份20周学习计算机科学的经验贴(附资源)

雷锋网按:这里是,油管Artificial Intelligence Education专栏,原作者Siraj Raval授权雷锋字幕组编译。 原标题 Computer Science Curriculum 翻译 | 王飞 整理 | 凡江 这是一份五个月(20个...

雷锋字幕组 ⋅ 05/08 ⋅ 0

程序员必备,快速学习 Python 的全套14张思维导图(附高清版下载)

后台回复关键词 思维导图 可获取本文中的高清思维导图(PDF版) ML & AI∣一个有用的公众号 长按,识别二维码,加关注 获取更多精彩文章

micf435p6d221ssdld2 ⋅ 05/23 ⋅ 0

一个月入门Python爬虫,快速获取大规模数据

数据是创造和决策的原材料,高质量的数据都价值不菲。而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如: 豆瓣、知乎:爬取优质答案,筛选出各话题下热门内容,探索...

Python开发者 ⋅ 04/25 ⋅ 0

5本必读Python入门书籍,你都看过吗?(附福利)

今天技术学派为大家准备了5本Python入门书籍,除了书籍小编还整理了3个常用的资源网站分享给大家。 1.Python基础教程 《Python基础教程》是经典的Python入门教程书籍,本书层次鲜明,结构严谨...

Python燕大侠 ⋅ 06/07 ⋅ 0

R语言构建层次分析模型不看一下吗~

作者简介 杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。 个人公众号:数据小魔方(微信ID:datamofang) ,“数据小...

R语言中文社区 ⋅ 05/13 ⋅ 0

[Notes]深度学习——caffe工具使用

本篇文章是我利用 caffe进行深度学习的知识点总结,包含别人学习笔记链接 caffe简介 caffe的作者为UC Berkeley大学的贾扬清。caffe是一个c++/CUDA架构,支持命令行、Python、Matlab接口,可以...

nanbei2463776506 ⋅ 04/24 ⋅ 0

Python机器学习及实践学习笔记1

简介 机器学习综述 机器学习隶属于人工智能研究与应用的一个分支。 “图灵测试”(Turing Test),用来判断一台计算机是否达到具备人工智能的标准。 大概描述:“如果通过问答这种方式,我们已...

zealfory ⋅ 05/28 ⋅ 0

她们不一样!python小白刚学会python竟然爬取了网上所有小姐姐的照片

如今想学python的人越来越多,无论是专业的程序员还是业余爱好者,都对python情有独钟。世界上值得学习的技能有很多,但是如果你要问我推荐哪一个,那么我会推荐一门编程语言,比如python。如...

Python学习 ⋅ 06/06 ⋅ 0

DeepLearning笔记: 如何在 Docker 里切换 Python 版本

在 DeepLearning-1:神经网络和 Docker 入门 一文中,我们介绍了 Docker 环境的安装和使用。 然后,00 遇到了 Python 的经典问题:Python 2 还是 Python 3?TensorFlow image 默认安装的是 ...

Kidult ⋅ 01/14 ⋅ 0

2018年被称为中国人工智能元年,人工智能技术已经成为国家战略,在2017的一年里,人工智能技术得到重视,已逐渐渗透到其它行业,无人超市、人脸识别、自动驾驶、智能家居等“黑科技”早已成为各大媒体的头

2018年被称为中国人工智能元年,人工智能技术已经成为国家战略,在2017的一年里,人工智能技术得到重视,已逐渐渗透到其它行业,无人超市、人脸识别、自动驾驶、智能家居等“黑科技”早已成为...

Python燕大侠 ⋅ 05/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

【新功能】企业级Maven私有仓库服务结束公测,全面开放使用

摘要: 目前云效上线了企业级Maven私有仓库服务。用户可以一键开通Maven私有仓库服务,零配置实现私有二方库的上传和下载。 经过半个月的公测,云效中的企业级Maven私有仓库服务正式上线,全...

阿里云云栖社区 ⋅ 13分钟前 ⋅ 0

elasticsearch使用more_like_this实现基于内容的推荐

官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-mlt-query.html 基于内容的推荐通常是给定一篇文档信息,然后给用户推荐与该文档相识的文档。Lucene的a...

xiaomin0322 ⋅ 16分钟前 ⋅ 0

Spring Boot更改Banner

Spring Boot 1.0 中如何更换启动 Banner,其实都很简单,只需要在src/main/resources路径下新建一个banner.txt文件,banner.txt中填写好需要打印的字符串内容即可。 一般情况下,我们会借助第...

Clarence_D ⋅ 20分钟前 ⋅ 0

谷歌浏览器下,去掉input输入记录提示框

谷歌浏览器在记住密码后,在input获取焦点的时候就会有输入提示框,如: 有时候我们在输入用户名时,我们自己有ajax的下拉展示列表,那么此时的历史提示输入框就影响交互和用户体检,解决的方...

莫西摩西 ⋅ 22分钟前 ⋅ 0

dlna流媒体服务搭建

简介 DLNA的全称是DIGITAL LIVING NETWORK ALLIANCE(数字生活网络联盟), 其宗旨是Enjoy your music, photos and videos, anywhere anytime, DLNA(Digital Living Network Alliance) 由索尼......

啊哼哼 ⋅ 28分钟前 ⋅ 0

Python10大好用的集成开发环境简析

  Python IDE工具是每个Python工程师必须使用的开发工具,选择正确的编辑器对Python编程效率的影响是非常大的,因此选择合适的Python开发工具十分重要,以下是通过长期实践发掘的好用的Pyt...

老男孩Linux培训 ⋅ 29分钟前 ⋅ 0

happybase(TSocket read 0 bytes)

关于报错 happybase 是使用python连接hbase的一个第三方库,目前基于thrift1 。在使用过程中经常碰到报错 TTransportException(type=4, message='TSocket read 0 bytes') 即使使用thrift se...

zhnxin ⋅ 29分钟前 ⋅ 0

手写简单RPC

1. 获取接口对应的实现类 package com.rpc.server.util; import java.io.File; import java.net.URL; import com.alibaba.fastjson.JSON; public class ClassUtils { public static Object ......

徐志 ⋅ 29分钟前 ⋅ 0

nginx服务器的gzip压缩

四、服务器的gzip压缩 1.ngx_http_gzip_module模块处理的9个指令 在处理时实时压缩 1>gzip on|off 开启或关闭gzip功能 2>gzip_buffers number size 用于设置文件使用缓存...

余温灬未存 ⋅ 31分钟前 ⋅ 0

前端程序员:月薪 5K 到 5 万,我干了啥

高贵的前端程序猿们: 如何在前端开发这种高精尖的技术领域找到心仪的工作?实现在咖啡馆喝喝咖啡敲敲代码就能升职加薪、买房买车、迎娶白富美走上人生巅峰的职业梦想?这 篇《进化论:从 0 ...

Mr_zebra ⋅ 34分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部