文档章节

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

初雪之音
 初雪之音
发布于 2015/10/10 21:48
字数 1168
阅读 158
收藏 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

 

 

 

© 著作权归作者所有

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

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

雷锋字幕组
05/08
0
0
更新日期#20141002#---python学习资料整理

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

moz1q1
2014/09/28
0
0
python!!等了好久吧,我来了。

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

倒逼live
2014/03/12
0
0
Python学到什么程度才可以去找工作?掌握这4点足够了!

大家在学习Python的时候,有人会问“Python要学到什么程度才能出去找工作”,对于在Python培训机构学习Python的同学来说这都不是问题,因为按照Python课程大纲来,一般都不会有什么问题,而对...

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

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

micf435p6d221ssdld2
05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mac OS X下Maven的安装与配置

Mac OS X 安装Maven: 下载 Maven, 并解压到某个目录。例如/Users/robbie/apache-maven-3.3.3 打开Terminal,输入以下命令,设置Maven classpath $ vi ~/.bash_profile 添加下列两行代码,之后...

TonyStarkSir
今天
3
0
关于编程,你的练习是不是有效的?

最近由于工作及Solution项目的影响,我在重新学习DDD和领域建模的一些知识。然后,我突然就想到了这个问题,以及我是怎么做的? 对于我来说,提升技能的项目会有四种: 纯兴趣驱动的项目。即...

问题终结者
今天
4
0
打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
4
0
搞定Northwind示例数据库,无论哪个版本的SQLServer都受用

Northwind数据库 从这里可以找到突破口: http://social.msdn.microsoft.com/Forums/zh-CN/Vsexpressvb/thread/8490a1c6-9018-40c9-aafb-df9f79d29cde 下面是MSDN: http://msdn2.microsoft......

QQZZFT
昨天
1
0
mysql主从同步,安装配置操作

准备 两台mysql服务,我这里准备了如下: 主库:192.168.176.128 从库:192.168.176.131 如何在Linux上安装mysql服务,请看https://blog.csdn.net/qq_18860653/article/details/80250499 操作...

小致dad
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部