Python学习 Part3:数据结构
Python学习 Part3:数据结构
1. 深入列表:
- 所有的列表对象方法
list.append(x): 在列表的末尾添加一个元素
list.extend(L): 在列表的末尾添加一个指定列表的所有元素
list.insert(i,x): 在指定位置插入一个元素
list.remove(x): 删除列表中值为x的第一个元素,如果不存在这样的元素则引发错误
list.pop(i): 删除列表中指定位置元素并返回它(指元素值)。如果省略索引,a.pop()会删除并返回列表中的最后一个元素
list.index(x): 返回列表中值为x的第一个元素的索引,如果不存在这样的元素则引发错误
list.count(x): 返回列表中元素x出现的次数
list.sort(): 对列表中的元素进行排序
list.reverse(): 反转列表中的元素
>>> a=[2,3,4,5,6,7,5,32,1]
>>> a.append(9)
>>> print(a)
[2, 3, 4, 5, 6, 7, 5, 32, 1, 9]
>>> a.extend([99,999])
>>> print(a)
[2, 3, 4, 5, 6, 7, 5, 32, 1, 9, 99, 999]
>>> a.insert(1,9999)
>>> print(a)
[2, 9999, 3, 4, 5, 6, 7, 5, 32, 1, 9, 99, 999]
>>> a.remove(5)
>>> print(a)
[2, 9999, 3, 4, 6, 7, 5, 32, 1, 9, 99, 999]
>>> x=a.pop(5)
>>> print(x)
7
>>> print(a.index(9999))
1
>>> print(a.count(9))
1
>>> a.sort()
>>> print(a)
[1, 2, 3, 4, 5, 6, 9, 32, 99, 999, 9999]
>>> a.reverse()
>>> print(a)
[9999, 999, 99, 32, 9, 6, 5, 4, 3, 2, 1]
>>>
- 用列表实现堆栈
堆栈功能:最后添加的元素是第一个被返回的元素。要想在堆栈顶部添加一个元素,可以使用append()方法;要想要返回堆栈顶部的元素,可以使用不指定索引参数的pop()方法
>>> stack=[3,4,5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
- 用列表实现对列
对列功能:第一个被添加的元素第一个被返回。想要在对列尾部添加一个元素,可以使用append()方法;想要返回对列首部的元素,可以使用指定参数为0的pop()方法
>>> queue=["Eric","John","Lilian"]
>>> queue.append("Terry")
>>> queue
['Eric', 'John', 'Lilian', 'Terry']
>>> queue.pop(0)
'Eric'
>>> queue
['John', 'Lilian', 'Terry']
- 列表推导式
列表推导式为从序列中创建列表提供了一个简单的方法。
列表推导式由包含一个表达式的括号组成,表达式后面跟随一个for子句,之后可以有零或多个for或if子句。结果是一个列表,由表达式依据其后面的for和if子句上下文计算而来的结果构成。如果希望表达式产生一个元组,则必须用括号包裹
>>> vec1=[2,4,6]
>>> vec2=[4,3,-9]
>>> [x*y for x in vec1 for y in vec2]
[8, 6, -18, 16, 12, -36, 24, 18, -54]
>>> [x+y for x in vec1 for y in vec2]
[6, 5, -7, 8, 7, -5, 10, 9, -3]
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
[8, 12, -54]
>>> [str(round(355/113,i)) for i in range(1,6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']
2. del语句
使用索引而不是值从列表中删除一个元素。与具有返回值得pop()方法不同。del语句也可以用来删除列表的一个片段或者清空整个列表
>>> a=[-1,1,3,45,6,6]
>>> del a[0]
>>> a
[1, 3, 45, 6, 6]
>>> del a[2:4]
>>> a
[1, 3, 6]
>>> del a[:]
>>> a
[]
>>>
>>> #del也可以用来删除整个变量
>>> del a
>>> a
Traceback (most recent call last):
File "<pyshell#68>", line 1, in <module>
a
NameError: name 'a' is not defined
>>>
3. 元组和序列
元组由若干逗号分隔的值组成,输出时总是用括号包裹。在输入时两边的括号是可选的。
>>> t=12345,54321,'Hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'Hello!')
>>> u=t,(1,2,3)
>>> u
((12345, 54321, 'Hello!'), (1, 2, 3))
一个特殊的问题就是构造包含0或1个元素的元组:空元组由一对空括号构成,包含一个元素的元组需要在其后面跟一个逗号来构成
>>> empty=()
>>> singleton='Hello',
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('Hello',)
>>>
t=12345,54321,'Hello!'语句是元组封装的一个示例,值12345,54321,‘hello!’ 被封装进一个元组,其逆反操作也是可以的:
>>> t=12345,54321,'Hello!'
>>> x,y,z=t
>>> x
12345
>>> y
54321
>>> z
'Hello!'
4. 集合
集合就是一个包含不同元组的无序集,基本功能包括关系测试和剔除重复记录。集合对象同样支持数学操作,像联合,交,差和对称差
大括号或set()函数可以用来创建集合。注意:想要创建空集合,必须使用set()而不是{}。后者用于创建空字典
>>> basket={'apple','orange','apple','pear','orange','banana'}
>>> print(basket)
{'banana', 'orange', 'pear', 'apple'}
>>> fruit=['apple','orange','apple','pear','orange','banana']
>>> fruit=set(basket)
>>> fruit
{'banana', 'orange', 'pear', 'apple'}
>>> fruit={'orange','apple'}
>>> fruit
{'orange', 'apple'}
>>> 'orange' in fruit
True
>>> 'crabgrass' in fruit
False
>>> a=set('abracadabra')
>>> b=set('alacazam')
>>> a
{'b', 'r', 'a', 'd', 'c'}
>>> a-b
{'b', 'r', 'd'}
>>> a|b
{'b', 'c', 'a', 'd', 'l', 'm', 'r', 'z'}
>>> a&b
{'c', 'a'}
>>> a^b
{'b', 'd', 'l', 'm', 'r', 'z'}
>>> a={x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}
5. 字典
与序列不同,序列式以连续的数字作为索引,而字典是以关键字作为索引。关键字可以是任意不可变类型,数字和字符串都可以作为关键字。如果元组只包含数字、字符串或元组,那么也可以作为关键字使用。不能将列表作为关键字,因为列表可以通过索引赋值、切片赋值或append(),extend()方法改变
可以将字典解释成一个无序的key:value对,其中关键字必须是互不相同的
字典的主要操作就是根据关键字来存储或获取值。同样可以使用del删除key:value对
>>> tel={'jack':4098,'sape':4139}
>>> tel['guido']=4127
>>> tel
{'guido': 4127, 'sape': 4139, 'jack': 4098}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv']=4127
>>> tel
{'guido': 4127, 'irv': 4127, 'jack': 4098}
>>> list(tel.keys())
['guido', 'irv', 'jack']
>>> sorted(tel.keys())
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> #dict()构造函数可以直接从key-value对中创建字典:
>>> dict([('sape',4139),('guido',4127),('jack',4098)])
{'guido': 4127, 'jack': 4098, 'sape': 4139}
>>> # 字典推导式可以从任意的键值表达式中创建字典
>>> {x: x**2 for x in (2,4,6)}
{2: 4, 4: 16, 6: 36}
6. 遍历技巧
当遍历字典时,关键字及其对应的值可以使用items()方法同时获得
>>> knights={'gallahad':'the pure','robin':'the brave'}
>>> for k,v in knights.items():
print(k,v) robin the brave
gallahad the pure
当遍历一个序列时,位置索引及其对应的值可以使用enumerate()函数同时获取
>>> for i, v in enumerate(['tic','tac','toe']):
print(i,v) 0 tic
1 tac
2 toe
想要同时遍历两个或更多序列时,可以使用zip()函数将属性组合
>>> questions=['name','quest','favorite','color']
>>> answers=['lancelot','the holy grail','blue']
>>> for q,a in zip(questions,answers):
print(q,a) name lancelot
quest the holy grail
favorite blue
Python学习 Part3:数据结构的更多相关文章
- python学习4—数据结构之列表、元组与字典
python学习4—数据结构之列表.元组与字典 列表(list)深灰魔法 1. 连续索引 li = [1,1,[1,["asdsa",4]]] li[2][1][1][0] 2. ...
- 从0开始的Python学习012数据结构&对象与类
简介 数据结构是处理数据的结构,或者说,他们是用来存储一组相关数据的. 在Python中三种内建的数据结构--列表.元组和字典.学会了使用它们会使编程变得的简单. 列表 list是处理一组有序的数据结 ...
- Python学习笔记——数据结构和算法(一)
1.解压序列赋值给多个变量 任何的序列(或者是可迭代对象)可以通过一个简单的赋值语句解压并赋值给多个变量. 唯一的前提就是变量的数量必须跟序列元素的数量是一样的. >>> data ...
- python学习之数据结构
python的数据很丰富,所以对于数据分析来讲, python是一种最合适的选择 下面讲述一下常见的数据结构,包括栈,队列,元组,字典,集合等,以及对这些数据结构进行操作 #堆栈,后进先出 a=[10 ...
- Python学习笔记——数据结构和算法(二)
1.字典中一个键映射多个值 可以使用collections中的defaultdict来实现,defalultdict接受list或者set为参数 from collections import def ...
- Python学习(四)数据结构(概要)
Python 数据结构 本章介绍 Python 主要的 built-type(内建数据类型),包括如下: Numeric types int float Text Sequence ...
- Python学习-第二天-字符串和常用数据结构
Python学习-第二天-字符串和常用数据结构 字符串的基本操作 def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1 ...
- python学习5—一些关于基本数据结构的练习题
python学习5—一些关于基本数据结构的练习题 # 1. use _ to connect entries in a list # if there are no numbers in list l ...
- python菜鸟教程学习:数据结构
列表方法 list.append(x):把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]. list.extend(L):通过添加指定列表的所有元素来扩充列表,相当于 a[len( ...
随机推荐
- 《java入门第一季》集合框架引入与面试题
注:在开始的几篇集合介绍里,不包含泛型的概念.泛型在讲述所有集合后再加入进去. 集合的由来: 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我 ...
- 跨平台移动APP开发进阶(四)AngularJS简介
AngularJS 是一个为动态WEB应用设计的结构框架.它能让你使用HTML作为模板语言,通过扩展HTML的语法,让你能更清楚.简洁地构建你的应用组件. 它的创新点在于,利用 数据绑定 和 依赖注入 ...
- Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送
Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...
- 打包volley
1.如果电脑没有安装git和ant的话,需要安装git和ant,直接Google就可以,并配置环境变量 2.在命令行执行 git clone https://android.googlesource. ...
- android 常用方法集合
private static Contextcontext; privatestatic Displaydisplay; private static String TAG = "MyToo ...
- 【翻译】使用Sencha Touch开发Google Glass应用程序
原文:Developing for Google Glass with Sencha Touch 作者:Ross Gerbasi Ross Gerbasi is a Senior Engineer a ...
- 【Java编程】Java基本数据类型
在较前面的一篇博文<C/C++基本数据类型>中,我主要介绍了c/c++的基本数据类型.我们知道C语言没有具体规定各类数据类型所占内存的字节数,只要求long型数据长度不小于int型,sho ...
- Tomcat configuration DataSource
1. configuration MySql Connection DataSource 原理介绍 java 调用 Tomcat 中的 ConnectionPool 通过Context 中去查找 j ...
- objective-c中类似ruby枚举类的实例方法
虽然obj-c的语法格式略显繁琐,但它和ruby都从某些方面继承了smalltalk的某些动态的东西.这些东西是 C和C++之类的静态语言所不曾有的. 比如ruby中可以将一个类或对象的所有方法枚举出 ...
- mq常用命令
IBM MQ常用命令 常用命令 创建队列管理器crtmqm –q QMgrName-q是指创建缺省的队列管理器删除队列管理器dltmqm QmgrName启动队列管理器strmqm QmgrNam ...