Python内置了四种集合框架(list、tuple、dict、set)

list:list是一种有序的集合

list里面的元素的数据类型也可以不同,list元素也可以是另一个list

In [28]: array = ['a',1,None,[2,3,4]]

In [29]: array
Out[29]: ['a', 1, None, [2, 3, 4]]

 In [31]: array[1]
 Out[31]: 1

In [32]: array[5]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-32-b10cbda823aa> in <module>()
----> 1 array[5]

IndexError: list index out of range

In [43]: array[3][1]
Out[43]: 3

添加、删除

list是一个可变的有序表,所以,可以往list中追加元素到末尾

In [35]: array.append('xiaohong')

In [36]: array
Out[36]: ['a', 1, None, [2, 3, 4], 'xiaohong']

也可以把元素插入到指定的位置,比如索引号为2的位置

In [37]: array.insert(2,456)

In [38]: array
Out[38]: ['a', 1, 456, None, [2, 3, 4], 'xiaohong']

要删除list末尾的元素,用pop()方法

In [39]: array.pop()
Out[39]: 'xiaohong' In [40]: array
Out[40]: ['a', 1, 456, None, [2, 3, 4]]

要删除指定位置的元素,用pop(i)方法,其中i是索引位置

In [41]: array.pop(2)
Out[41]: 456 In [42]: array
Out[42]: ['a', 1, None, [2, 3, 4]]

获取list的长度

In [44]: len(array)
Out[44]: 4

取前三个元素:

In [1]: a = [1,2,3,4,5]
In [3]: a[0:3]
Out[3]: [1, 2, 3]

迭代索引和元素

In [10]: b = [1,2,'ffg']
In [12]: for i,value in enumerate(b):
....: print i,value
....:
0 1
1 2
2 ffg

同时引用两个变量迭代

In [13]: b = [(1,2),(3,4),(5,6)]
In [15]: for x,y in b:
....: print x,y
....:
1 2
3 4
5 6

快速生成一个1-10的列表

In [17]: range(1,11)
Out[17]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

tuple(元组):tuple一旦初始化就不能修改,因为tuple不可变,所以代码更安全

tuple中的元素只能获取,不能增删改

In [46]: tup
Out[46]: (1, 2, 3) In [48]: tup[1]
Out[48]: 2

如果只有一个元素,义时必须加一个逗号‘,’,来消除歧义:

In [49]: t = (1,)

In [50]: t
Out[50]: (1,)

tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

dict:dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

定义:

In [51]: a = {"xiaohong":56,"xiaobai":78,"xiaohei":69}
或:
In [54]: a["xiaolv"] = 88

输出value

In [53]: a["xiaobai"]
Out[53]: 78

In [55]: a.get("xiaohong")
Out[55]: 56

删除key:

In [56]: a.pop("xiaobai")
Out[56]: 78 In [57]: a
Out[57]: {'xiaohei': 69, 'xiaohong': 56, 'xiaolv': 88}

遍历

1、只遍历key

In [4]: a = {"xiaohong":23,"xiaoming":45,"xiaodong":48}
In [6]: for key in a:
...: print key
...:
xiaoming
xiaohong
xiaodong

2、只遍历value

In [8]: for value in a.itervalues():
...: print value
...:
45
23
48

3、同时迭代key和value

In [9]: for k,v in a.iteritems():
...: print k,v
...:
xiaoming 45
xiaohong 23
xiaodong 48

dict和list比较

  1. dict查找和插入的速度极快,不会随着key的增加而增加;list查找和插入的时间随着元素的增加而增加;
  2. dict需要占用大量的内存,内存浪费多。list占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。

dict的key必须是不可变对象

这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。

要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:

set:一组无重复key的集合,类似于dict,但只存key

要创建一个set,需要提供一个list作为输入集合,为了与tuple区分开

有两种方法:
1
In [60]: s = set([1,2,3,4,4]) In [61]: s
Out[61]: {1, 2, 3, 4} 2
In [62]: b = {2,3,4,5,6} In [63]: b
Out[63]: {2, 3, 4, 5, 6}

添加元素:

In [64]: s.add(9)

In [65]: s
Out[65]: {1, 2, 3, 4, 9}

删除元素:

In [66]: s.remove(1)

In [67]: s
Out[67]: {2, 3, 4, 9}

交并集运算:

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
set([2, 3])
>>> s1 | s2
set([1, 2, 3, 4])

set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。

Python的集合框架的更多相关文章

  1. Java集合(1)一 集合框架

    目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) java集合(4)一 红黑树. ...

  2. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  3. Python开源机器学习框架:Scikit-learn六大功能,安装和运行Scikit-learn

    Python开源机器学习框架:Scikit-learn入门指南. Scikit-learn的六大功能 Scikit-learn的基本功能主要被分为六大部分:分类,回归,聚类,数据降维,模型选择和数据预 ...

  4. Python的Django框架中forms表单类的使用方法详解

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  5. selenium + python自动化测试unittest框架学习(二)

    1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py &g ...

  6. Collection 集合框架

    1. Collection 集合框架:在实际开发中,传统的容器(数组)在进行增.删等操作算法和具体业务耦合在一起,会增加程序的开发难度:这时JDK提供了这样的容器---Collection 集合框架, ...

  7. python+selenium之框架设计

    一.自动化测试框架 1.什么是自动化测试框架 简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境.自动化测试框架能够提供很多便利给用户高效完成一些事情,例如,结构清晰开发脚本, ...

  8. Python的Django框架中的Context使用

    Python的Django框架中的Context使用 近期整理些Python方面的知识,一旦你创建一个 Template 对象,你能够用 context 来传递数据给它. 一个context是一系列变 ...

  9. Python Flask Web 框架入门

    Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...

随机推荐

  1. [2011-3-9 12:59 ]As3.0中的位图(Bitmap/BitmapData)用法

    1.位图使用(模糊)滤镜 //创建一个矩形区域的BitmapData var bmd:BitmapData = new BitmapData(80, 30, false, 0xefefef); //画 ...

  2. Django---ModelForm详解

    示例: from django.db import models from django.forms import ModelForm TITLE_CHOICES = ( ('MR', 'Mr.'), ...

  3. git分支合并脚本

    为什么要写这个脚本 工作中经常会有合并分支的操作,一开始也不以为然,后来发现如果更新频繁的话,根本就停不下来,昨天上午正好有空,就完成了下面的这个初版 可能存在的问题 一般的应用场景都是:从maste ...

  4. 聊一聊HTML <!DOCTYPE> 标签

    一般一个基本html页面的结构,如下代码所示: <html> <head> <title>我是基本的页面结构</title> </head> ...

  5. 制作 macOS High Sierra U盘USB启动安装盘方法教程 (全新安装 Mac 系统)

    方法一:使用命令行创建制作 macOS High Sierra 正式版 USB 安装盘 首先,准备一个 8GB 或更大容量的 U盘,并备份好里面的所有资料. 下载好 macOS High Sierra ...

  6. terminal配置

    阅读目录 前言 使用 tmux 复用控制台窗口 在命令行中快速移动光标 在命令行中快速删除文本 快速查看和搜索历史命令 快速引用和修饰历史命令 录制屏幕并转换为 gif 动画图片 总结 回到顶部 前言 ...

  7. nodeJs和JavaScript的异同

    JavaScript组成:ECMAScript(定义这门语言的基础,比如语法.数据类型.结构以及一些内置对象等).DOM(基于ECMASCRIPT,扩展出来的用于操作页面元素的方法).BOM(基于EC ...

  8. Ad Exchange基本接口和功能

    这里描述下一个exchange通常应该提供的接口和应该满足的功能. 接口 实时竞价接口 实时竞价接口也是最核心的接口,对接的dsp需要向exchange提供竞价地址.每次有广告请求时,exchange ...

  9. AngularJS Injector和Service的工作机制

    要了解angularJS里的injector和Service是如何工作的,需要阅读/src/auto/injector.js.另外要结合/src/loader.js才能明白它的应用场景. auto/i ...

  10. Global.asax详解

    在网上找了N多相关的东西总说的不够细,现在终于找到了.可以了解web.cofig和Global.asax之间的关系以及执行的顺序. 在Global.asax.cs文件中 protected void ...