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. PHP(Mysql/Redis)消息队列的介绍及应用场景案例

    在进行网站设计的时候,有时候会遇到给用户大量发送短信,或者订单系统有大量的日志需要记录,还有做秒杀设计的时候,服务器无法承受这种瞬间的压力,无法正常处理,咱们怎么才能保证系统正常有效的运行呢?这时候我 ...

  2. ELK之elasticsearch5.6的安装和head插件的安装

    这里选择的elasticsearch为5.6的新版本,根据官方文档有几种暗装方式: https://www.elastic.co/guide/en/elasticsearch/reference/cu ...

  3. Kali视频学习6-10

    Kali视频学习6-10 kali信息收集之主机探测 主机探测指识别目标机器是否可用(简单来说是否在线),在探测过程中,需要得到目标是否online等信息.由于IDS和(入侵检测系统)和IPS(入侵保 ...

  4. ssh-keygen 的 详解

    为了让两个Linux机器之间使用ssh不需要用户名和密码.所以采用了数字签名RSA或者DSA来完成这个操作. 模型分析 假设 A (192.168.20.59)为客户机器,B(192.168.20.6 ...

  5. IPTABLES拒绝某个IP某项服务,并记录到日志(rhel7实例)

    #iptables -I INPUT -p icmp -s 192.168.0.1 -j DROP                 \\在INPUT链中插入:如果检测到从192.168.0.1发过来的 ...

  6. db2快照

    一.获取快照日志 #1.查看数据库编目 db2 list db directory #2.attach 到要分析的数据库 db2 attach to pm1_9 user db2dev #3.conn ...

  7. Java 数据结构之双向链表

    一.概述: 1.什么是双向链表: 链表中的每个节点即指向前面一个节点,也指向后面一个节点,就像丢手绢游戏一样,每个人都手拉手 2.从头部插入 要对链表进行判断,如果为空则设置尾节点为新添加的节点,如果 ...

  8. RabbitMQ入门(1)——Hello World

    这系列是官网的翻译和一些博客的参考,仅供自己复习使用. 介绍 官网定义: RabbitMQ is the most widely deployed open source message broker ...

  9. 《用 Python 学微积分》笔记 3

    <用 Python 学微积分>原文见参考资料 1. 16.优化 用一个给定边长 4 的正方形来折一个没有盖的纸盒,设纸盒的底部边长为 l,则纸盒的高为 (4-l)/2,那么纸盒的体积为: ...

  10. Matlab 日期频次统计

    一.孕妇建档月份频次统计 源数据样本,为某医院一段时间内的孕妇建档时间 2015-04-22 10:12:522014-11-21 17:16:472013-12-16 17:35:442013-12 ...