数据结构

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

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

列表(list)

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

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

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

 shoplist = ["apple","mango","carrot","banana"]

 print "i have ",len(shoplist),"item  to purchase"

 print"these items are:",

 for item in shoplist:
print item, print"\n I also have to buy rice"
shoplist.append("rice")
print 'My shopping list is now', shoplist print 'I will sort my list now'
shoplist.sort()
print'sorted shopping list is ',shoplist print 'the first item I will buy is',shoplist[0]
olditem = shoplist[0] del shoplist[0] print 'I bought the',olditem
print ' My shopping list is now ',shoplist

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

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

元组

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

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

不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

 zoo = ('wolf','elephant','penguin')  #定义一个zoo的元组数据

 print 'number of animals in the zoo is',len(zoo)   #打印元组数据的长度

 new_zoo = ('monkey','doplhin',zoo)  #定义一个新的new_zoo类型的数据 讲之前的zoo 包含进来
print 'number od animals in the new zoo is ',len(new_zoo) #取得新的元组的长度 print 'animals brought fron old zoo are',new_zoo[2] #取得new_zoo中第三个数据 即zoo的序列数据
print 'Last animal brought from old zoo is',new_zoo[2][2]#取得new_zoo中第三个数据中的第三个数据 即zoo中的第三个数据为penguin

tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:

>>> t = (1, 2)
>>> t
(1, 2)

如果要定义一个空的tuple,可以写成()

>>> t = ()
>>> t
()

但是,要定义一个只有1个元素的tuple,如果你这么定义:

>>> t = (1)
>>> t
1

定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1

所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

>>> t = (1,)
>>> t
(1,)

Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。

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

元组打印语句

 age = 22
name = 'Swaroop' print '%s is %d years old' %(name , age)

字典

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

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

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

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

字典是dict类的实例/对象

 ab  =  {  'Swaroop' :
'swaroopch@byteofpython.info',
'Larry' : 'larry@wall.org',
'Matsumoto' : 'matz@ruby-lang.org',
'Spammer' : 'spammer@hotmail.com' # 创建新的字典类型的对象ab
}
print "Swaroop's address is %s" % ab['Swaroop'] #检索出Swaroop的对象信息
# Adding a key/value pair 添加一个新的键值
ab['Guido'] = 'guido@python.org'
# Deleting a key/value pair 删除已经存在的键值
del ab['Spammer']
print '\nThere are %d contacts in the address-book\n' %len(ab)
for name, address in ab.items():
print 'Contact %s at %s' % (name, address)
if 'Guido' in ab: # OR ab.has_key('Guido')
print "\nGuido's address is %s" % ab['Guido']

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

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

序列

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

 shoplist = ['apple', 'mango', 'carrot', 'banana']
# Indexing or 'Subscription' operation
print 'Item 0 is', shoplist[0]
print 'Item 1 is', shoplist[1]
print 'Item 2 is', shoplist[2]
print 'Item 3 is', shoplist[3]
print 'Item -1 is', shoplist[-1]
print 'Item -2 is', shoplist[-2]
# Slicing on a list
print 'Item 1 to 3 is', shoplist[1:3]
print 'Item 2 to end is', shoplist[2:]
print 'Item 1 to -1 is', shoplist[1:-1]
print 'Item start to end is', shoplist[:]
# Slicing on a string
name = 'swaroop'
print 'characters 1 to 3 is', name[1:3]
print 'characters 2 to end is', name[2:]
print 'characters 1 to -1 is', name[1:-1]
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解释器交互地尝试不同切片指定组合,即在提示符下你能够马上看到结果。序列的神奇之处在
于你可以用相同的方法访问元组、列表和字符串。

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

  1. python基础学习二 数据结构之list及相关基本操作

    list是py内置的一种数据类型,list就是列表的意思,list就是一种有序的数据集合,可以随时增加和删除list的元素. 生活中,比如我们要列出全班同学的名字,就可以用list来表示 >&g ...

  2. Python 基础学习 总结篇

    Python 基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结 ...

  3. Day1 Python基础学习

    一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...

  4. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  5. Day1 Python基础学习——概述、基本数据类型、流程控制

    一.Python基础学习 一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编 ...

  6. (一)python基础学习

    根据廖雪峰老师的python教程写一些学习总结! Python基础学习 1.使用list和tuple (1)list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时 ...

  7. python基础学习(起步)

    目录 python基础学习(起步) 变量 常量 变量的内存管理 python垃圾回收机制 变量的其他赋值方式 今日编程小题 本人能力有限,若有偏颇之处请读者大大不吝赐教! 祝大家每天都在成长! pyt ...

  8. Python基础学习二

    Python基础学习二 1.编码 utf-8编码:自动将英文保存为1个字符,中文3个字符.ASCll编码被囊括在内. unicode:将所有字符保存为2给字符,容纳了世界上所有的编码. 2.字符串内置 ...

  9. Python基础学习一

    Python基础学习一 1.变量与常量 变量名:大小写英文.数字.下划线的组合,数字不能开头 常量名:习惯上常量用大写字母命名,例如"PI" 2.多行输出 转义符:反斜杠(),如果 ...

  10. Python基础学习五

    Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出 ...

随机推荐

  1. kvstore存储介质redis代码

    <?php /** * ShopEx licence * * @copyright Copyright (c) 2005-2010 ShopEx Technologies Inc. (http: ...

  2. BOOTICE(引导扇区维护工具) V1.3.3 中文免费绿色版

    软件名称: BOOTICE(引导扇区维护工具)软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 357KB图片预览: 软件简 ...

  3. Error establishing socket解决办法

    jdbc配置语句为: jdbc:microsoft:sqlserver://server_name:1433 如运行程序时出现 "Error establishing socket" ...

  4. js预编译

    先来做三个测试 eg1: var a; a = 1; function a() {}; console.log(a); eg2: var a; function a() {}; console.log ...

  5. 9---PIP 管理工具的使用

    Python 不仅有强大的内置模块,还提供强大的三方模块. 官方网站: https://pypi.python.org/pypi 要适用三方的模块需要使用pip管理工具. 1.在安装pip前,请确认w ...

  6. ASP.NET应用程序的生命周期

    对基于.Net平台的Web应用程序开发者来说,编写适合的应用程序生命周期的代码是非常重要的.所以必须要了解应用程序生命周期才能在适当的生命周期阶段编写合适代码,达到预期的效果.ASP.NET应用程序的 ...

  7. dialog弹出,点击back按键无法返回问题解决

    今天阅读队友代码,调试代码中,发现对话框弹出点击back按键无法返回问题解决. 代码如下: /** * 单个按钮没有标题的弹框 * * @param context * @param content内 ...

  8. Android中截取当前屏幕图片

    该篇文章是说明在Android手机或平板电脑中如何实现截取当前屏幕的功能,并把截取的屏幕保存到SDCard中的某个目录文件夹下面.实现的代码如下: [html] view plaincopy   /* ...

  9. HDU2629:Identity Card

    Problem Description Do you own an ID card?You must have a identity card number in your family's Hous ...

  10. StartSSL证书申请

    StartSSL官方地址: http://www.startssl.com/ 申请过程: 1)填写资料 2) 获取得验证码 3)提交验证码,等待6小时审核. 4)再次获得验证码,提交等待审核 5)审核 ...