Python学习手册 Part2 类型和运算

介绍Python对象类型

程序由模块构成,模块包含语句,语句包含表达式,表达式建立并处理对象。

对象类型 常量示例/用法
Number(数字) 3.14159, 1234, 999L 3+4j
String(字符串) 'spam', "guido's"
List(列表) [1,[2, 'Three'],4]
Dictionary(字典) {'food':'spam', 'taste':'yum'}
Tuple(元组) (1,'spam',4,'U')
File(文件) text=open('egges','r').read()
Set(集合) set('abc'),{'a','b','c'}
其他类型 类型,None,布尔型
编程单元类型 函数,模块,类
与实现相关的类型 编译的代码堆栈跟踪

Python的每个对象都分为可变和不可变,主要的核心类型中,数字、字符串、元组是不可变的,列表、字典是可变的。
(序列:字符串,元组,列表)

元组的操作:

tuple(obj),切片,in,for in,del,cmp,len,max,min

#定义一个元组
tuple1 =()
tuple1 = tuple({1,2,3,4,5,'6'})
tuple1 = (1, 2, '3', 4, '5')
# 定义了一个元组之后就无法再添加或修改元组中的元素,但是可以重新赋值
print tuple1[0] # 元组的元素都有确定的顺序。元组的索引也是以0为基点的
print tuple1[-1] # 负的索引从元组的尾部开始计数
print tuple1[1:3] # 元组也可以进行切片操作。对元组切片可以得到新的元组。
# 可以使用 in 运算符检查某元素是否存在于元组中。
print 1 in tuple1 # True
#使用for in 进行遍历元组
for item in tuple1:
print item
# 如果需要获取item的序号 可以使用下面的遍历方法:
for index in range(len(tuple1)):
print tuple1[index]
# 还可以使用内置的enumerate函数
for index, item in enumerate(tuple1):
print '%i, %s' % (index, item)
print max(tuple1)
print min(tuple1)
print len(tuple1)

列表的操作:

list(obj),切片,in,for in,del,cmp,len,max,min
list.append(),list.insert(index,obj),list.extend(seq),list.remove(obj),list.pop(index=-1),list.count(obj),sorted(list),reversed(list),list.index(obj)

#定义一个列表
listA = ['a', 'b', 'c', 1, 2]
list(obj)
#把对象转换成列表,obj可以是元组,字典,字符串等
print list((1,2,3,4,5,6,8,6))
#[1,2,3,4,5,6,8,6]
haloword = list('halo word')
print haloword
#['h', 'a', 'l', 'o', ' ', 'w', 'o', 'r', 'd']
#元素计数
print haloword.count('o')
#2
#元素查找(返回第一次出现索引,没有则报错)
print haloword.index('o')
#3
#haloword[3]='o'
#元素排序,倒置位置
numbers = [1,2,3,'4',5,'6']
print sorted(numbers)
#[1, 2, 3, 5, '4', '6']
print list(reversed(numbers))
#['6', 5, '4', 3, 2, 1]
# 向 list 中增加元素
# 1.使用append 向 list 的末尾追加单个元素。
listA.append(3)
# 2.使用 insert 将单个元素插入到 list 中。数值参数是插入点的索引
listA.insert(3, 'd') # 在下标为3处添加一个元素
# 3.使用 extend 用来连接 list
listA.extend([7, 8])
# extend 和 append 看起来类似,但实际上完全不同。
# extend 接受一个参数,这个参数总是一个 list,
# 并且把这个 list 中的每个元素添加到原 list 中。
# 另一方面,append 接受一个参数,这个参数可以是任何数据类型,并且简单地追加到 list 的尾部。
# 获取列表的长度
print len(listA) # 9
# 在 list 中搜索
listA.index(3) # index 在 list 中查找一个值的首次出现并返回索引值。
listA.index('100') # 如果在 list 中没有找到值,Python 会引发一个异常。
# 要测试一个值是否在 list 内,使用 in。如果值存在,它返回 True,否则返为 False 。
print 5 in listA
# 从 list 中删除元素
# remove 从 list 中 仅仅 删除一个值的首次出现。如果在 list 中没有找到值,Python 会引发一个异常
listA.remove(3)
# pop 它会做两件事:删除 list 的最后一个元素,然后返回删除元素的值。
print listA.pop()
# 遍历list
for item in listA:
print item

字典的操作:

dict(obj),in,for key in dict,del,cmp,len,max,min
dict[key],dict.keys(),dict.fromkeys(seq,value),dict.has_key(key),dict.get(key,default),dict.items(),dict.values():,dict.update(dict2),dict.pop(key),dict.setdefault(key ,defaultvalue),dict.clear(),dict.copy()

# 定义一个字典
# Dictionary 不只是用于存储字符串。Dictionary 的值可以是任意数据类型,
# 包括字符串、整数、对象,甚至其它的 dictionary。
# 在单个 dictionary 里,dictionary 的值并不需要全都是同一数据类型,可以根据需要混用和匹配。
dict1 = {'name' : 'LiuZhichao', 'age' : 24, 'sex' : 'Male'}
dict1['name'] = 'Liuzc' # 为一个已经存在的 dictionary key 赋值,将简单覆盖原有的值。
dict1['Age'] = 25 # 在 Python 中是区分大小写的 age和Age是完全不同的两个key
#使用dict()创建字典
dict_test = dict((['x',1],['y',2]))
#{'y': 2, 'x': 1}
#使用dict.fromkeys()创建字典
#创建并返回一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值(默认为None)
dict.fromkeys(seq,val=None)
#遍历数组 form key in dict_test (不可以更改字典长度,报错)
# 方法 1.报错
form key in dict_test:
if(key=='x'):
del dict_test[key]
# 方法 2.正常
from key in dict_test.keys()
if(key=='x'):
del dict_test[key]
#dict.has_key(key)判断key是否存在
dict_test.has_key('x')
#True
#dict.get(key,default) 返回键值key的值,若是key不存在,返回default的值
dict_test.get('x',0)
#1
#dict.update(dict2) 将dict2的键值对列表添加到字典dict中去
dict_test.update({
'name':'rming',
'age':100,
})
#{'y': 2, 'x': 1,'name':'rming','age':100}
#dict.pop(key)返回键值key的value ,删除原字典该减值
print dict_test.pop('name')
print dict_test
#rming
#{'y': 2, 'x': 1,'age':100}
#dict.setdefault(key ,defaultvalue) 类似get方法,能够获得给定key的value,此外setdefault还能在自动重不含有给定key的情况下设定相应的key-value
dict_test.setdefault('sex','male')
#male
#{'y': 2, 'x': 1,'age':100,'sex','male'}
#dict.copy():返回具有相同key-value的新字典,为浅复制(shallow copy)
new_dict = dict_test.copy()
#key in dict 是否有该键,同 dict.has_key(key)
'x' in new_dict
#True
# 从字典中删除元素
del dict1['sex'] # del 允许您使用 key 从一个 dictionary 中删除独立的元素
dict1.clear() # clear 从一个 dictionary 中清除所有元素

集合的操作 :

Python的集合(set)和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.由于集合是无序的,所以,sets 不支持 索引, 分片, 或其它类序列(sequence-like)的操作。

#定义一个集合
set1 = {1, 2, 3, 4, 5}
# 或者使用 set 函数
list1 = [6, 7, 7, 8, 8, 9]
set2 = set(list1)
set2.add(10) # 添加新元素
print set2 # set([8, 9, 6, 7]) 去掉重复内容,而且是无序的
set3 = frozenset(list1)
set3.add(10) # 固定集合不能添加元素
#方法(所有的集合方法):
s.issubset(t) #如果s是t的子集,返回True,否则返回False
s.issuperset(t) #如果s是t的超集,返回True,否则返回False
s.union(t) #返回一个新集合, 该集合是s和t的并集
s.intersection(t) #返回一个新集合, 该集合是s和t的交集
s.difference(t) #返回一个新集合, 该集合是s的成员, 但不是t的成员, 即返回s不同于t的元素
s.symmetric_defference(t) #返回所有s和t独有的(非共同拥有)元素集合
s.copy() #返回一个s的浅拷贝, 效率比工厂要好
#方法(仅适用于可变集合):以下方法参数必须是可哈希的
s.update(t) #用t中的元素 修改s,即s现在包含s或t的成员
s.intersection_update(t) #s中的成员是共同属于s和t的元素
s.difference_update(t) #s中的成员是属于s但不包含在t中的元素
s.symmetric_difference_update(t) #s中的成员更新为那些包含在s或t中,但不是s和t共有的元素
s.add(obj) #在集合s中添加对象obj
s.remove(obj) #从集合s中删除对象obj,如果obj不是集合s中的元素(obj not in s),将引发keyError错误
s.discard(obj) #如果obj是集合s中的元素,从集合s中删除对象obj
s.pop() #删除集合s中得任意一个对象,并返回它
s.clear() #删除集合s中的所有元素
## 集合有并集,交集,求差操作
## 并集:intersection() 方法返回一个新集合,包含在两个集合中同时出现的所有元素。
## 交集:union() 方法返回一个新集合,包含在两个 集合中出现的元素。
## 差集:difference() 方法返回的新集合中,包含所有在 集合A出现但未在集合B中的元素。
## symmetric_difference() 方法返回一个新集合,包含所有只在其中一个集合中出现的元素。
# 删除元素
set2.discard(6) # 当元素不存在时,不会引发异常
set2.remove(6) # 与discard的区别在于,如果没有要删除的元素,remove会引发一个异常
set2.pop() # 因为set是无序的,所以pop会随机的从set中删除一个元素

本部分内容参考http://rmingwang.com/python-tuple-list-dict-set.html#1

数字

十六进制,八进制,二进制

oct(a) :将十进制a转为十六制
hex(a):将十进制a转为八进制
bin(a):将十进制a转为二进制

位操作

不研究

math模块

其他数字类型

小数数字

对于需要特别高要求精度的数字,可以采用小数对象

>>> from decimal import Decimal
>>> Decimal('0.1') + Decimal('0.11')
>>> Decimal('0.21')

如果需要控制精度,使用decimal.getcontext().prec = a 来保留小数点后a位数

分数类型

直接看例子:

>>> from fractions import Fraction
>>> x = Fraction(4,6)
>>> x
>>> Fraction(2,3)
转换

浮点数对象可以用as_integer_ratio()方法可以将其转为两个整数相除的形式。

数字扩展 Numpy

动态类型简介

python是动态强类型语言

python赋值过程:变量,对象和引用

变量:变量是一个系统表的元素,拥有指向对象的连接的空间。
对象:对象是分配的一块内存,有足够的空间去表示它们所代表的值。
引用:引用是自动形成的从变量到对象的指针。

举例 a = 3:

  • 创建一个对象来代表值3
  • 创建一个变量a,如果他没有被创建的话
  • 将变量与新的对象3相连接

ps:类型属于对象,而不是变量。这就导致可以对a赋值多次不同类型的值。

共享引用和原处修改

对于列表L1 = [1,2,3], L2 = [1,2,3],这两个[1,2,3]属于两个对象,而如果L3 = L1 ,那么L1,L3都指向同一个[1,2,3]。可以用is 和 == 区别。
PS:对于一些较小的值,例如a =3,b=3,那么a is b是True。

字符串

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 个人笔记,方便自己查阅使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik阅读 67,678评论 0 5
  • 最近在慕课网学习廖雪峰老师的Python进阶课程,做笔记总结一下重点。 基本变量及其类型 变量 在Python中,...
    victorsungo阅读 1,656评论 0 5
  • 一、python 变量和数据类型 1.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序...
    绩重KF阅读 1,642评论 0 1
  • 教程总纲:http://www.runoob.com/python/python-tutorial.html 进阶...
    健康哥哥阅读 2,009评论 1 3
  • 浓浓的夜,没有夏虫,没有蝉鸣 略有微风 刮来远处田野中夜焚的气息 融化在空中,也有一丝甜腻 我起身喝了一口酽茶 坐...
    丁一文阅读 130评论 0 1