组合数据类型

5种内置的序列类型:bytearray,bytes,list,str,tuple

元组

元组:固定,有序,索引从0开始,分片,步距语法支持

不能替换或者删除其中的任意数据项,使用list()元组可以转换为list,之后就可以修改了

tuple在不指定参数时返回一个空元组

可以使用()创建空元组

在元组作为参数传递时必须加()避免歧义

元组提方法

t.count(x)返回x在元组中出现的次数;

t.index(x)返回x在元组t中出现的最左边位置,如果元组中不包含x,那么抛出ValueError异常

元组使用的操作符

+,*,[],in ,not in ,+=,*=,(实际上创建了新元组)

<,<=,==,!=,>=,>  逐项进行比较

序列拆分

左边是元组,右边是序列,称为右边拆分,拆分用于交换值

>>> a,b=(1,2)
>>> a
1
>>> b
2
>>> a,b
(1, 2)
>>> a,b=(b,a)
>>> a,b
(2, 1)

 for ...in...

>>> for x,y in ((1,2),(2,3),(3,4)):
print(x,y) 1 2
2 3
3 4

 命名的元组

和普通元组一样,可以根据名称来引用元组中的项

collections.namedtuple(n,s)函数,该函数用于创建自定义的元组数据类型

第一个参数是想要创建的字符串元组名称

第二个参数是字符串,其中包含使用空格分隔的名称,每个名称代表该元组数据类型中的一项

列表

列表是包含0个或多个对象引用的有序序列,支持分片,步距

列表是可变的,可以进行删除,替换,插入

list()不带参数调用时返回一个空列表,带一个list参数时,返回该参数的浅拷贝,对任意多个参数,则尝试将给定的对象转换为列表。

列表可以使用[]创建

列表中所有数据项实际上都是对象引用,因此和元组一样。列表也可以存放任意类型的数据项。

列表可以使用比较操作符<,<=,==,!=,>=,> 逐项处理

列表方法

l.append(x) 将数据项x追加到列表l的尾部

l.count(x) 数据项x在列表中出现的次数

l.extend(x),l+=x  将迭代x追加到l尾部

l.index(x,start,end) 返回数据项x在列表中最左边出现的索引位置

l.insert(i,x)在索引位置int i处将数据项 x插入列表l

l.pop()返回并移除l中索引位置int i处的数据项

l.pop(i)返回并移除l中索引位置i处的数据项

l.remove(x)从list中移除最左边的数据项x,如果找不到x,产生ValueError异常

l.sort()对列表l进行排序,与内置的sorted()函数一样,这个方法可以接受可选的key与reverse

序列拆分

用于赋值操作符左边有两个或者多个变量时,其中的一个使用*进行引导,数据项赋值给该变量,而所有剩下的数据项赋值给带*的变量

>>> first,*second=[1,2,3,4,5]
>>> first
1
>>> second
[2, 3, 4, 5]

函数调用使用带*的参数

>>> def getadd(a,b,c):
return a+b+c >>> getadd(1,2,3)
6
>>> L=[1,2,3]
>>> getadd(*L)
6

  

del操作

del的作用是取消变量的引用

>>> a=1
>>> del a

 *操作符是用作复制操作符还是拆分操作符并不会产生二义性,

当*出现在赋值操作的左边是,用作拆分操作符,若用作单值操作符,则代表拆分操作符,若用作二进制操作符,则代表复制操作

  

列表内涵

小列表通常使用列表字面值直接创建,但长一些的列表,对一系列系数我们可以使用 list(range(10)),或者如果只需要一个整数迭代,使用range()足够完成任务,但对更复杂一些的列表使用for...in...循环创建是一种常见的做法。

  列表内涵是一个表达式,也是一个循环,该循环有一个可选的,包含在方括号中的条件,作用是为列表生成数据项,

并且可以使用条件过滤不需要的数据项

  [item for item in iterable]

可以使用表达式,可以附加条件

  [expression for item in iterable]

  [expression for item in iterable if condition]

 range(n)

>>> a=list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> leaps=[y for y in range(1900,1940) if y%4==0]
>>> leaps
[1900, 1904, 1908, 1912, 1916, 1920, 1924, 1928, 1932, 1936]

集合类型

set也是一种组合数据类型

支持成员关系操作符in,对象大小计算操作符len(),支持比较,支持逻辑操作

set分两种:可变的set,固定的frozenset

只有可哈希运算的对象可以增加到集合中,可哈希运算的对象包含一个__hash__()方法,返回值在某个对象的声明周期中都是相同的

并且可以使用__eq__()方法进行相等性比较

  所有内置的固定数据类型都是可hash运算的(float,fozenset,int,str,tuple)

  内置可变的数据类型都是不可hash运算的(dict,list,set)

集合是0个或多个对象引用的无序组合,集合是可变的,没有索引位置的概念,也不能分片或按步距分片

set() 不带参数进行调用返回一个空的set,带一个set参数时返回该对象的浅拷贝,对任意其他数据类型尝试进行转换

空集合必须使用set()创建

集合中包含的数据项都是独一无二的,增加重复的数据项固定不会引发问题,但是毫无意义

>>> s=set("apple")
>>> s1=set("aple")
>>> s==s1
True

  集合常用语删除重复项

>>> x=list(set("apple"))
>>> x
['p', 'a', 'e', 'l']

  集合支持 len(),也支持in,not in

s.add(x) 将数据项x增加到集合s中,若果s中尚未包含x

s.clear() 移除集合s中的所有项

s.copy() 返回集合s的浅拷贝

s.difference(t)s-t 返回一个新集合,其中包含在s中但不在集合t中的所有数据项

s.differecnce_update(t)s-=t 移除每一个在集合t但不在集合s中的项

s.discard(x)如果数据项x存在于集合s中,就移除该数据项

s.intersection(t)s&t返回一个新集合,其中包含所有同时包含在集合t与s中的数据项

s.intersection_update(t)s&=t使得集合s包含自身与集合t的交集

s.isdisjoint(t)如果s与t没有相同项,返回true

s.issubset(t)s<=t如果集合s与集合t相同,或者是t的自己,就返回true,使用s<t可以测试 s是否是t的真子集

s.issuperset(t)s>=t如果集合s与集合t相同,或者是t的超集,返回true,使用s>t可以测试t是否是s的真子集

s.pop()返回并移除集合s中一个随即项,如果s为空集,就产生KeyError异常

s.remove(x) 从集合s中移除数据项x,如果s中不包含x就产生KeyError异常

s.symmetric_difference(t)s^t返回一个新集合,其中包含s与t中的每一个数据项,但不包含相同项

s.symmetric_difference_update(t)s^=t使得集合s只包含其自身与集合t的对称差

s.union(t) s|t返回一个新集合,其中包含集合s中的所有数据项一级在t中而不在s中的数据项

s.update(t) s|=t 将集合t中每个s中不包含的数据项都增加到集合s中

集合类型的一个常用场景是进行快速的成员关系测试。

>>> x={"192.168.1.1","192.168.1.2"}
>>> x
{'192.168.1.1', '192.168.1.2'}
>>> '192.168.1.1' in x
True

  

>>> s=sorted(set("apple"))
>>> s
['a', 'e', 'l', 'p']

  

集合的内涵

除调用set()创建集合,或使用集合字面值创建集合外,我们可以使用集合内涵来创建集合。

集合内涵是一个表达式,也是一个带有条件的循环,与列表内涵类似

{expression for item in iterable}

{expression for item in iterable if condition}

我们可以使用上面的语法来过滤

html={x for x in files if x.lower().endswith((".html",".htm"))}

固定集合

固定集合是指一旦创建就不能改变的集合,固定集合智能使用frozenset()数据类型函数进行创建

不带参数创建换一个空的固定集合,带一个forzenset参数,返回参数的浅拷贝,对任意其他数据项都尝试将给定的数据项转换为一个frozenset.该函数智能接受一个参数

由于固定集合是固定不变的,因此其支持的方法与操作符所产生的结果都不能影响固定集合本身

frozenset.copy(),frozenset.difference(),forzenset.intersection(),frozenset.union()

frozenset.symmetric_difference()

如果将二元运算符应用于集合与固定集合,那么产生结果的数据类型与左边操作数的数据类型一直。

由于固定集合的固定不变性,使得其满足集合项的可哈希运算的标准,因此,集合与固定集合都可以包含固定集合

映射类型

映射是键值数据项的组合,并且提供了存取数据项及其键,值的方法。进行迭代时,映射类型以任意顺序提供其数据项。

两种无序的映射:内置的dict类型,collections.defaultdict,collections.OrderedDict(有序字典)

只有可hash的对象可用做字典的键(float,frozenset,int,str,tuple)都可以用作字典的键

字典

dict是一种无序的组合数据类型,包含0或多个键值对。

键可hash,值可任意类型

字典是可变的

字典是无序的

空的{会创建空字典}

>>> d=dict({"name":"hiuyeung","age":18})
>>> d={"name":"hiuyeung","age":18}
>>> d=dict(name="hiuyeung",age=18)
>>> d=dict([("name","hiuyeung"),("age",18)]) >>> d=dict(zip(("name","age"),("hiuyeung",18)))

  del

>>> del d['age']
>>> d
{'name': 'hiuyeung'}

  d.clear()从dict d中移除所有项

d.copy()返回dict d的浅拷贝

d.fromkeys(s,v),返回一个dict该字典的键为序列s中的项,值为None或者v

d.get(k)返回键k相关联的值,如果k不在dict d中就返回None

d.get(k,v)返回k相关联的值,如果k不在dict d中就返回v

d.items()返回dict d中所有(key,value)对的视图

d.keys()返回d中所有键的视图

d.pop(k) 返回k关联的值,并移除键为k的项,如果k不包含在d中就产生keyError异常

d.pop(k,v)返回k关联的值,并移除键为k的项,如果k不包含在d中就返回v

d.pop(item)返回并移除dict d中一个任意的(key,value),如果d为空就产生keyError异常

d.setdefault(k,v)与dict.get()方法一样,不同在于,如果k没有包含在dict d中就插入一个键为k的新乡,其值为v或None

d.update(a)将a中每个尚未包含在dict d中的key,value对增加到d,对同事包含在d与a中的每个键,使用a中对应的值d中对应的值,a可以是字典,可以是(key,value)对的一个iterable

d.values() 返回dict d中所有的值视图

字典的内涵

字典的内涵是一个表达式,同时也是一个循环,该循环带有一个可选的条件,与集合内涵非常类似。

{keyexpression:valueexpression for key,value in iterable}

{keyexpression:valueexpression for key,value in iterable if condition}

有序字典

collections.OrderedDict 有序字典以数据项插入的顺序进行存储

创建有序字典时使用了无序字典,那么有序字典的顺序是任意的

Python学习笔记(三)的更多相关文章

  1. Python 学习笔记三

    笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...

  2. webdriver(python) 学习笔记三

    知识点:简单的对象定位 对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象.一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪 ...

  3. python学习笔记三--字典

    一.字典: 1. 不是序列,是一种映射, 键 :值的映射关系. 2. 没有顺序和位置的概念,只是把值存到对应的键里面. 3. 通过健而不是通过偏移量来读取 4. 任意对象的无序集合 5. 可变长,异构 ...

  4. Python学习笔记三

    一. 为什么要使用函数? 函数可以方便阅读代码. 函数可以减少重复代码. 函数可以减少管理操作,减少修改操作. 二. 函数分类: 内置函数:len()   sum()   max()   min() ...

  5. python学习笔记(三)、字典

    字典是一种映射类型的数据类型.辣么什么是映射呢?如果看过<数据结构与算法>这一本书的小伙伴应该有印象(我也只是大学学习过,嘻嘻). 映射:就是将两个集合一 一对应起来,通过集合a的值,集合 ...

  6. Python学习笔记三:模块

    一:模块 一个模块就是一个py文件,里面定义了一些业务函数.引用模块,可以用import语句导入.导入模块后,通过 模块.函数名(参数)  来使用模块中的函数.如果存在多个同名模块,则前面模块名需要加 ...

  7. python学习笔记(三)高级特性

    一.切片 list.tuple常常截取某一段元素,截取某一段元素的操作很常用 ,所以python提供了切片功能. L=['a','b','c','d','e','f'] #取索引0,到索引3的元素,不 ...

  8. python学习笔记(三):文件操作和集合

    对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 文件基本操作: f = open('file.txt','r') #以只读方式打开一个 ...

  9. python学习笔记三:函数及变量作用域

    一.定义 def functionName([arg1,arg2,...]): code 二.示例 #!/usr/bin/python #coding:utf8 #coding=utf8 #encod ...

  10. python学习笔记(三)-列表&字典

    列表: 一.列表操作"""Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素.比如,列出班里所有同学的名字,就可以用一 ...

随机推荐

  1. C#ConcurrentDictionary源代码

    using System; using System.Collections.Generic;using System.Text; using System.Threading; using Syst ...

  2. bzoj 1006

    http://www.cnblogs.com/zxfx100/archive/2011/03/23/1993055.html https://wenku.baidu.com/view/07f4be19 ...

  3. jmeter接口测试实例7-关联

    Jmeter实例7:关联(牛刀小试中登录.金币充值接口) 必须从网上下载这个插件放在lib的ext目录下才可以用,在登录接口添加此插件 Sign是变量名,其实就是下一步充值金币要取的值:路径是从哪里取 ...

  4. weblogic 下异常 org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken

    项目之前在 Tomcat 环境下一直都正常运行,今天应客户要求需要迁移到 webLogic 10.3.6 下, 部署后竟然抛出了 org.hibernate.QueryException: Class ...

  5. Java利用ShutDownHook关闭系统资源

    Java关闭钩子 在Java程序中能够通过加入关闭钩子,实如今程序退出时关闭资源的功能. 使用Runtime.addShutdownHook(Thread hook)向JVM加入关闭钩子 public ...

  6. 如何确定Isilon cluster的网卡类型是40GbE的还是10GbE的

    可以使用isi upgrade cluster firmware devices命令. 从命令行输出可以看到,当前的cluster使用的是40G的前端网卡. 如果是10G网卡,输出结果应当是如下的样子 ...

  7. MySQL关于根据日期查询数据的sql语句

    查询在某段日期之间的数据: select * from 数据表  where 时间字段名 BETWEEN '2016-02-01' AND '2016-02-05' 查询往前3个月的数据: selec ...

  8. Android application捕获崩溃异常

    Java代码 .收集所有 avtivity 用于彻底退出应用 .捕获崩溃异常,保存错误日志,并重启应用 , intent, , restartIntent); // 关闭当前应用 finishAllA ...

  9. 使用idea创建web项目

    一直使用的是eclipse,有一个项目开发用的是idea,我也尝试着熟悉一下idea,先来创建一个web项目吧 1.idea下载安装使用 官方下载地址:https://www.jetbrains.co ...

  10. Emacs 不将M-Del删除的单词加入粘贴板

    原文:https://jblevins.org/log/clipboard I use a clipboard manager called Copied that syncs previously ...