Python学习笔记(三)
组合数据类型
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学习笔记(三)的更多相关文章
- Python 学习笔记三
笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...
- webdriver(python) 学习笔记三
知识点:简单的对象定位 对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象.一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪 ...
- python学习笔记三--字典
一.字典: 1. 不是序列,是一种映射, 键 :值的映射关系. 2. 没有顺序和位置的概念,只是把值存到对应的键里面. 3. 通过健而不是通过偏移量来读取 4. 任意对象的无序集合 5. 可变长,异构 ...
- Python学习笔记三
一. 为什么要使用函数? 函数可以方便阅读代码. 函数可以减少重复代码. 函数可以减少管理操作,减少修改操作. 二. 函数分类: 内置函数:len() sum() max() min() ...
- python学习笔记(三)、字典
字典是一种映射类型的数据类型.辣么什么是映射呢?如果看过<数据结构与算法>这一本书的小伙伴应该有印象(我也只是大学学习过,嘻嘻). 映射:就是将两个集合一 一对应起来,通过集合a的值,集合 ...
- Python学习笔记三:模块
一:模块 一个模块就是一个py文件,里面定义了一些业务函数.引用模块,可以用import语句导入.导入模块后,通过 模块.函数名(参数) 来使用模块中的函数.如果存在多个同名模块,则前面模块名需要加 ...
- python学习笔记(三)高级特性
一.切片 list.tuple常常截取某一段元素,截取某一段元素的操作很常用 ,所以python提供了切片功能. L=['a','b','c','d','e','f'] #取索引0,到索引3的元素,不 ...
- python学习笔记(三):文件操作和集合
对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 文件基本操作: f = open('file.txt','r') #以只读方式打开一个 ...
- python学习笔记三:函数及变量作用域
一.定义 def functionName([arg1,arg2,...]): code 二.示例 #!/usr/bin/python #coding:utf8 #coding=utf8 #encod ...
- python学习笔记(三)-列表&字典
列表: 一.列表操作"""Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素.比如,列出班里所有同学的名字,就可以用一 ...
随机推荐
- 3ds max学习笔记(十五)-- 二维图形的操作
(二维图形的创建) 1,在命令面板的[新建],单击第二个按钮: 从中选择对象名称,在视图种单击拖动进行创建,特殊:线:摁[shift]限制水平,垂直方向: 2,二维对象参数: 在渲染中启用:显示二维线 ...
- dedecms在后台替换文章标题、内容、摘要、关键字
dedecms在后台替换文章标题.内容.摘要.关键字所在的字段为: 后台替换文章内容 数据表:dede_addonarticle 字段:body 后台替换文章摘要内容 数据表:dede_archive ...
- db2 reorgchk
db2 reorgchk 命令是最重要的.也是经常被忽略的 DB2 调整命令之一. db2 reorgchk 命令被忽略是因为它不是一个一次性调整项.由于更新是在 DB2 数据库上执行的,因此关于表的 ...
- 【枚举】Consonant Fencity @upcexam5110
时间限制: 3 Sec 内存限制: 512 MB 题目描述 There are two kinds of sounds in spoken languages: vowels and consonan ...
- 【】tensorflow学习笔记
一.看懂了Tensor("mul_1:0", shape=(), dtype=int32)中的shape https://blog.csdn.net/u013378306/arti ...
- 微信公众号申请+新浪SAE申请
一. 新浪SAE服务申请 1. 注冊地址:http://t.cn/RqMHPto 2. 选择控制台>>云应用SAE 3. 创建新应用 4. 填写域名 5. 代码管理选择SVN 6. 创建版 ...
- jquery的deferred使用详解
原文:hhtps://www.cnblogs.com/shijingjing07/p/6403450.html -------------------------------------------- ...
- springMVC4(7)模型视图方法源代码综合分析
在完整web开发中.springMVC主要充当了控制层的角色.它接受视图层的请求.获取视图层请求数据,再对数据进行业务逻辑处理.然后封装成视图层须要的模型数据,再将数据导向到jsp等视图界面. 在前面 ...
- 解决Android Studio出现GC overhead limit exceeded
方法一: 修改项目目录下的gradle.properties,增加如下配置信息(红色文字中需要根据自己电脑的配置修改内存大小,其余的配置用于加快gradle的编译速度) org.gradle.daem ...
- 【一天一个shell命令】【cut】
1. 命令简介 cut根据指定的定界符,切分文件,并将选中的列输出到标准输出. 2. 用法 cut [选项]... [文件]... 打印输入行的选中的parts 到标准输出 3. 选项 4. 示例 以 ...