Python基础学习3---数据结构

数据结构

数据结构基本上就是---他们是可以处理数据的结构或者说他们是用来存储一组相关数据的。

在python中有三种内建的数据结构-----列表、元组和字典

列表(list)

列表就像是我们要去超市买东西列的清单一样,将需要买的东西列成清单后整个结构是就是列表数据了,一旦创建完成后 我们可以随意进行添加 删除修改操作 所以可以断定

列表数据是一个可变的数据类型

列表是使用对象和类的一个例子。当你使用变量 i 并给它赋值的时候,比如赋整数 5 ,你可以认为你创建了一个类(类型) int 的对象(实例) i 。事实上,你可以看一下 help(int) 以更好地理解这一点。

 1 shoplist = ["apple","mango","carrot","banana"]
 2
 3 print "i have ",len(shoplist),"item  to purchase"
 4
 5 print"these items are:",
 6
 7 for item in shoplist:
 8     print item,
 9
10 print"\n I also have to buy rice"
11 shoplist.append("rice")
12 print ‘My shopping list is now‘, shoplist
13
14 print ‘I will sort my list now‘
15 shoplist.sort()
16 print‘sorted shopping list is ‘,shoplist
17
18 print ‘the first item I will buy is‘,shoplist[0]
19 olditem = shoplist[0]
20
21 del shoplist[0]
22
23 print ‘I bought the‘,olditem
24 print ‘ My shopping list is now ‘,shoplist

现在创建了一个list数据类型的对象 shoppinglist 进行增加 删减 以及调用类方法的操作。

注意,我们在 print 语句的结尾使用了一个 逗号 来消除每个 print 语句自动打印的换行符。这样做有点
难看,不过确实简单有效。在python3.x版本中使用  ”end"  这样的字符来消除自动换行默认操作。

元组

元组和字符串一样是不可变的 即你不能修改元组。元组是通过圆括号加逗号的方式来进行定义,元组通常在使用语句或者用户定义的函数能够安全的采用一组值得时候

即被使用的元组的值不会改变。

1 zoo = (‘wolf‘,‘elephant‘,‘penguin‘)  #定义一个zoo的元组数据
2
3 print ‘number of animals in the zoo is‘,len(zoo)   #打印元组数据的长度
4
5 new_zoo = (‘monkey‘,‘doplhin‘,zoo)  #定义一个新的new_zoo类型的数据 讲之前的zoo 包含进来
6 print ‘number od animals in the new zoo is ‘,len(new_zoo) #取得新的元组的长度
7
8 print ‘animals brought fron old zoo are‘,new_zoo[2]  #取得new_zoo中第三个数据 即zoo的序列数据
9 print ‘Last animal brought from old zoo is‘,new_zoo[2][2]#取得new_zoo中第三个数据中的第三个数据 即zoo中的第三个数据为penguin

含有0个或1个项目的元组。一个空的元组由一对空的圆括号组成,如 myempty = () 。然而,含有单个
元素的元组就不那么简单了。你必须在第一个(唯一一个)项目后跟一个逗号,这样Python才能区分元组
和表达式中一个带圆括号的对象。即如果你想要的是一个包含项目 2 的元组的时候,你应该指
明 singleton = (2 , ) 。

元组打印语句

1 age = 22
2 name = ‘Swaroop‘
3
4 print ‘%s is %d years old‘ %(name , age)

字典

字典类似于手机中的通讯录一样,即我们输入名字键()和详细的信息(值)联系在一起。注意 键必须是唯一的就像我们如果有两个人恰巧同名的话你就无法找到正确的信息。

注意:只能够使用不可变的对象比如字符串来作为字典的键 但是你可以不可变或者可变的对象作为字典的值基本说来就是你应该只使用简单的对象作为键。

键值对字典中以这样的方式标记: d={key1:values1,key2:values2} 注意他们的键/值对用冒号分割 而各个对用逗号分割 所有这些都需要包括在花括号里面。

记住字典中的键/值对是没有顺序的 如果你想要一个特定的顺序 那么应该在使用前对它们排序。

字典是dict类的实例/对象

 1 ab  =  {  ‘Swaroop‘ :
 2 ‘[email protected]‘,
 3 ‘Larry‘ : ‘[email protected]‘,
 4 ‘Matsumoto‘ : ‘[email protected]‘,
 5 ‘Spammer‘ : ‘[email protected]‘   # 创建新的字典类型的对象ab
 6 }
 7 print "Swaroop‘s address is %s" % ab[‘Swaroop‘] #检索出Swaroop的对象信息
 8 # Adding a key/value pair 添加一个新的键值
 9 ab[‘Guido‘] = ‘[email protected]‘
10 # Deleting a key/value pair 删除已经存在的键值
11 del ab[‘Spammer‘]
12 print ‘\nThere are %d contacts in the address-book\n‘ %len(ab)
13 for name, address in ab.items():
14     print ‘Contact %s at %s‘ % (name, address)
15 if ‘Guido‘ in ab: # OR ab.has_key(‘Guido‘)
16     print "\nGuido‘s address is %s" % ab[‘Guido‘]

接下来,我们使用字典的 items 方法,来使用字典中的每个键/值对。这会返回一个元组的列表,其中每个

元组都包含一对项目——键与对应的值。我们抓取这个对,然后分别赋给 for..in 循环中的变
量 name 和 address 然后在for-块中打印这些值。
我们可以使用 in 操作符来检验一个键/值对是否存在,或者使用 dict 类的 has_key 方法。你可以使
用 help(dict) 来查看 dict 类的完整方法列表。

序列

列表、元组和字符串都是序列,但是序列是什么,它们为什么如此特别呢?序列的两个主要特点是索引操作符切片操作符。索引操作符让我们可以从序列中抓取一个特定项目。切片操作符让我们能够获取序列的一个切片,即一部分序列。

 1 shoplist = [‘apple‘, ‘mango‘, ‘carrot‘, ‘banana‘]
 2 # Indexing or ‘Subscription‘ operation
 3 print ‘Item 0 is‘, shoplist[0]
 4 print ‘Item 1 is‘, shoplist[1]
 5 print ‘Item 2 is‘, shoplist[2]
 6 print ‘Item 3 is‘, shoplist[3]
 7 print ‘Item -1 is‘, shoplist[-1]
 8 print ‘Item -2 is‘, shoplist[-2]
 9 # Slicing on a list
10 print ‘Item 1 to 3 is‘, shoplist[1:3]
11 print ‘Item 2 to end is‘, shoplist[2:]
12 print ‘Item 1 to -1 is‘, shoplist[1:-1]
13 print ‘Item start to end is‘, shoplist[:]
14 # Slicing on a string
15 name = ‘swaroop‘
16 print ‘characters 1 to 3 is‘, name[1:3]
17 print ‘characters 2 to end is‘, name[2:]
18 print ‘characters 1 to -1 is‘, name[1:-1]
19 print ‘characters start to end is‘, name[:]

 索引操作符 和切片操作符

1.索引操作符也叫下标操作符,是用括号中的一个数来指定一个序列的时候 python会自动抓取序列中对应的项目。有一点非常要注意的是 python中的索引下标可以使用负数。

位置是从队列尾部开始计算的比如说shoplist[-1]表示的是最后一个元素。

2.切片操作符是序列号后跟一个方括号,方括号内有一对可选的数字并用冒号隔开。 注意这个跟使用的索引操作符非常相似。 记住 数是可选的 冒号是必须的。

切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结
束。如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾。
注意,返回的序列从开始位置 开始 ,刚好在 结束 位置之前结束。即开始位置是包含在序列切片中的,而
结束位置被排斥在切片外。

这样, shoplist[1:3] 返回从位置1开始,包括位置2,但是停止在位置3的一个序列切片,因此返回一
个含有两个项目的切片。类似地, shoplist[:] 返回整个序列的拷贝。
你可以用负数做切片。负数用在从序列尾开始计算的位置。例如, shoplist[:-1] 会返回除了最后一个
项目外包含所有项目的序列切片。
使用Python解释器交互地尝试不同切片指定组合,即在提示符下你能够马上看到结果。序列的神奇之处在
于你可以用相同的方法访问元组、列表和字符串。

时间: 2024-08-01 06:24:21

Python基础学习3---数据结构的相关文章

Python基础学习(十)

Python I/O模型 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 概念说明 在进行解释之前,首先要说明几个概念: 用户空间和内核空间 进程切换 进程的阻塞 文件描述符 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件

python基础学习12(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #python class #面向对象编程oop思想,3个特性:封装.继承.多态,在其他方面的功能,比如重载,模拟等,也可以自定义自己需要的类 #在python中,面向对象主要2个:类和类实例 #类与实例 #类与实例有关

Python基础学习 总结篇

Python基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结构(概要) Python学习(四)数据结构 —— int float Python学习(四)数据结构 —— str Python学习(四)数据结构 —— bool Python学习(四)数据结构 —— list tuple range Python学习(四)数据结构 —— set frozenset

python基础学习日志day5-各模块文章导航

python基础学习日志day5---模块使用 http://www.cnblogs.com/lixiang1013/p/6832475.html python基础学习日志day5---time和datetime模块 http://www.cnblogs.com/lixiang1013/p/6848245.html python基础学习日志day5---random模块http://www.cnblogs.com/lixiang1013/p/6849162.html python基础学习日志da

Python 基础学习 网络小爬虫

<span style="font-size:18px;"># # 百度贴吧图片网络小爬虫 # import re import urllib def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImg(html): reg = r'src="(.+?\.jpg)" pic_ext' imgre = re.compile(reg) imgli

python基础学习05(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #dict{键:值} #哈希 #注:字典是无顺序的,所以你懂的 #创建与赋值 dict1={} dict2={'name':'apply','avg':24,'sex':'man'} print dict1,dict2

Python基础学习(九)

Python 多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 程序的运行速度可能加快 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. 线程在执行过程中与进程还是有区别的.每个独立的线程有一个程序运行的入口.顺序执行序列和程序的出口.

python基础学习07(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #file与input output #文件对象 #简单说来,就是写入和读取的方式 #file(),open()2个操作都是一样的,一般推荐open() #语法 # open(name[, mode[, bufferin

python基础学习08(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #异常 """ NameError: 尝试访问一个未申明的变量 ZeroDivisionError:  除数为零 SyntaxError: 解释器语法错误 IndexError: 请求的索引超出序列范

python基础学习09(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #什么是函数 #就是引用,创建,使用 #例子 def foo(): print '233' foo() #返回与函数类型 def foo1():#是一个过程 print 'hello world!' foo1() foo