文档章节

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

初雪之音
 初雪之音
发布于 2015/10/10 21:48
字数 1168
阅读 162
收藏 11

前记

        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

 

 

 

© 著作权归作者所有

共有 人打赏支持
初雪之音
粉丝 47
博文 268
码字总数 150009
作品 0
广州
程序员
私信 提问
更新日期#20141002#---python学习资料整理

1 参考学习地址http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000 2笔记代码:https://github.com/moziqi/Python 补充,以数据结构来学习python,不懂数据结......

moz1q1
2014/09/28
0
0
良心推荐:一份20周学习计算机科学的经验贴(附资源)

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

雷锋字幕组
05/08
0
0
python!!等了好久吧,我来了。

先学习Python的哲学,这样可以让我知道是不是适合我去学。然后,学习一些Python的基本语法,网络上还是很多这类电子书的。了解后,就可以找些资料对比各各框架,选择出最适合自己需求的。初步...

倒逼live
2014/03/12
0
0
学习笔记(11月13日)--json的使用

五周一次课(11月13日) 一、json的使用 Json简介:Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式。Json最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式。...

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

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

micf435p6d221ssdld2
05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

微服务分布式事务实现

https://www.processon.com/view/link/5b2144d7e4b001a14d3d2d30

WALK_MAN
今天
2
0
《大漠烟尘》读书笔记及读后感文章3700字

《大漠烟尘》读书笔记及读后感文章3700字: 在这个浮躁的社会里,你有多久没有好好读完一本书了? 我们总觉得自己和别人不一样,所以当看到别人身上的问题时,很少有“反求诸己”,反思自己。...

原创小博客
今天
3
0
大数据教程(9.5)用MR实现sql中的jion逻辑

上一篇博客讲解了使用jar -jar的方式来运行提交MR程序,以及通过修改YarnRunner的源码来实现MR的windows开发环境提交到集群的方式。本篇博主将分享sql中常见的join操作。 一、需求 订单数据表...

em_aaron
今天
3
0
十万个为什么之什么是resultful规范

起源 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点...

尾生
今天
3
0
Terraform配置文件(Terraform configuration)

Terraform配置文件 翻译自Terraform Configuration Terraform用文本文件来描述设备、设置变量。这些文件被称为Terraform配置文件,以.tf结尾。这一部分将讲述Terraform配置文件的加载与格式。...

buddie
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部