[python]-day2

数据类型

数据类型由三部分组成身份(id)、类型(type)、值。
看对象有没有改变使用id(object)查看对象的内存地址是否改变。

def compare(a,b):
  if a is b:  #a和b是同一个对象
    statements
  if a == b:  #a和b具有相同的值
    statements
  if type(a) =type(b):  #a和b具有相同的类型
    statements

python能直接处理的数据类型有以下几种(type)
数值number:整数int,长整型long,浮点数float #python3中long不存在,int可以存储64位整数
布尔值bool:True、False #注意大小写,在与数值运算时,True的值为1,False的值为0
空值:None
字符串:str
线性容器:list,tuple #支持迭代,字符串也是一种线性容器
Hash容器:dict,set

如果对象的值是可以修改的,则称为可变对象(mutable),否则成为不可变对象(immutable)。

可以进行对象类型和值的对比。其他比较操作符也支持>、<、>=、<=、!=、==,逻辑操作符and、or、not

数值

查看int对象所具有的方法:help(int),dir(int),int.doc

bit_length(Number of bits necessary to represent self in binary.返回表示该数字的时占用的最少位数)

a = 1
print a.bit_length()

二进制符号

  • 位移 >> <<
    x << y \ x >> y #左移(补0)和右移(切尾)是基于二进制的一种算法 >>、 <<,使用bin函数查看二进制
    x << y == x * ( 2 ** y )
    可用于计算硬盘容量,比如 1024 >> 10

  • 按位与 &
    二进制靠右对齐,不足补0,比较位置都是1则返回1,其他位返回0
    可用于奇偶数判断,数值与1进行&运算,返回0则为偶数,返回1则为奇数:5 & 1 == 1

  • 按位或 |
    二进制靠右对齐,不足补0,比较位置只要有1,则返回1

  • 按位异或 ^
    比较位相异返回1,相同返回0

  • 按位取反 ~

字符串

python默认ascii码。使用单引号和双引号效果一样。
跟C语言类似,可以使用\进行转义:\n换行,\t制表符,\r回车符,\0空值(Null)

如果长字符串需要跨越多行,有如下三种方法:

  • 使用'''xxxxxxxx'''代替普通引号
  • 使用三个"""xxxxxxxx"""
  • 在每行最后加上\将换行符转义。

原始字符串:如果在字符串前加上r,即输出引号中原始字符串 print r'let's go!',不能在原始字符串尾部输入\,除非对其进行转义
字符串的索引:a[0],字符串偏移量从0开始,最后一位从-1开始。字符串的值不可原地改变。
+为字符串的拼接,*为字符串的重复

查看字符串具有的方法:help(str),dir(str)
count(self, sub, start=None, end=None):用于统计字符串里某个字符出现的次数,可选参数为在字符串搜索的开始与结束位置。sub –> 搜索的子字符串,start –> 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。end –> 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
decode(self, encoding=None, errors=None):解码,对于len在处理汉字的时候因为返回的是字节数目导致结果不符,可以使用decode转码,或者len(u"哈哈")
encode(self, encoding=None, errors=None):编码,针对unicode
find(self, sub, start=None, end=None):检测字符串中是否包含子字符串str,如果指定beg(开始)和end(结束)范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。
isalnum(self):法检测字符串是否由字母和数字组成,如果string至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False
isalpha(self):
split: S.split([sep [,maxsplit]]) -> list of strings返回一个list
join:
replace:
translate:
示例:打印出字符串中的字符及其位置

a = 'shsh'
for i in range(len(a)):
    print '(%d)' % i,a[i]

也可以使用enumerate()函数:

a = 'shsh'
for i,ch in enumerate(a):
      print '(%d)' % i,ch

示例:取出字符串中的数字

a = "aAsmr3idd4bgs7Dlsf9eAF"
print ''.join([x for x in a if x.isdigit()])

示例:字符串的拼接
1.c = a + b
2.c = "{a}{b}" .format(a=a,b=b)
3.c = "%s%s" % (a,b)
4.c="".join([a,b])

str和repr

str函数用于将值转化为适用于人阅读的形式,相当于to string
repr函数转化为供解释器读取的形式,创建一个合法的字符串表示值,repr(x)等同x
print '1+2='+1+2

字符串格式化format

在Python中,采用的格式化方式和C语言是一致的,用%实现;
有几个%?,后面就跟几个变量,顺序需要一致(只有一个变量的时候,括号可以省略);如果不太确认用什么,可以直接使用%s将任何数据类型转换为字符串;
字符串里含%可用%%进行转义,来表示一个%;
可以在"%"和字母之间插进数字表示最大场宽。 例如: %3d 表示输出3位整型数, 不够3位右对齐。 %9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6, 小数点占一位, 不够9位右对齐。
%d 整数 :print "1+1 = %d " % int(1+1)
%f 浮点数
%s 字符串 : print "my name is %s lilei" % "hanmeimei's"
%x 十六进制整数
'%s is a %s' % ('he','boy')
字典形式的字符串的格式化更加灵活,注意花括号的位置

'%(who)s is a %(gender)s' %{'who':'he','gender':'boy'}
"this is {whose} {fruit}" .format (fruit = "apple" , whose = "my")

list 列表

方括号中,逗号分隔,索引下标从0开始。类型可变,元素的类型可以不同,可以包含任意类型的python对象。支持嵌套,list里也可以包含一个list。可原地修改内容。

创建一个空列表:
names = []
names = list()

有序集合
classmate = ['Micherl','Bob','Marry']
len(classmate),max(classmate),min(classmate)
classmate[0] classmate[-1] #取值
classmate[1]='Kack' #赋值,不能赋值超过列表长度,可以先进行初始化,再进行赋值
del classmate[1] #删除元素,后面元素前移
'Marry' in classmate #in or not in判断元素是否在列表中
classmate.index('Micherl')
使用+运算符可以连接列表

列表的方法

classmate.append('Adam') #追加,返回值并不是新的list,而是none
classmate.count('Bob') #某元素出现次数
classmate1.extend(classmate2) #将b扩展到a后面,a的列表刷新了
classmate.index('Bob') #值追索引
classmate.insert(1,'Jack') #1至后面的元素集体后移,插队
classmate.pop(1) #退出最后一个元素,与append类似栈,后进先出
classmate.remove('Bob') #删除第一个匹配元素
classmate.reverse #元素反向
sort方法:
x=[1,3,2,6,4]
y=x[:] #不能简单的y=x.sort()因为sort方法无返回值,也可以使用sorted(x),可以返回排序后的列表
y.sort()
print x
print y

分片

classmate[1:2] 第一个索引包含在分片内,第二个索引不包含在分片内,一般第三个参数默认为1,步长如果为负数,则从右到左提取元素。
分片赋值 classmate[2:]='a' 相当于替换元素
分片删除 del classmate[2:]
列表可以进行相加 print [1,2,3]+[3,4],相同类型才能进行相加,如列表和字符串不能进行加减
乘法:序列乘以数值,则序列会被重复数值次数,
空值 None 如果要初始化一个长度为10的空序列 seq=[None]*10
检查一个值是否在序列中 'Micherl' in classmate 返回布尔值

列表、元组和字典字面量可以在不使用续行符()的情况下分步多行,另外最后一项允许跟一个逗号

a = [1,
3,4,
  "hello",
]

列表深复制和浅复制

浅复制:

a=[1,2,[3,4]]
b=a
b is a #b和a指向同一个对象
del b  
print a  #删除b后,既删除b的指向,a无变化
print b
b=list(a)  #创建一个a的浅复制
b is a   #False
b.append(100)  #给b追加一个元素
print a    #a无变化
print b    #b增加了一个元素
b[2][0]=-100
print a
print b #注意a的变化
c=a
del c[:]
print a
print c

深复制将创建一个新的对象,并且递归复制它所包含的所有对象

import copy
a = [1,2,[3,4]]
b = copy.deepcopy(a)
b[2][0] = -100
print a
print b

列表推导式

[expr for iter_var in iterable] :首先迭代iterable里所有的内容,每一次迭代都把iterable中的内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式计算值生成一个列表。
[x+1 for x in range(1:11)]
可以这样理解这个推导式
new_list=[]
for x in range(1:11)
new_list.append(x+1)
print new_list

[expr for iter_var in iterable if cond_expr] :加入了判断语句,只有满足cond_expr条件的才把iterable丢到iter_var,最后用表达式生成列表
[x+1 for x in range(1:11) if x % 2 == 1]
生成字符串:['the %s' % d for d in xrange(10)]
生成元组:[(x,y) for x in range(2) for y in range(2)]
生成字典:dict([(x,y) for x in range(3) for y in range(3)])
g = {i:j.upper() for i,j in zip(range(1,6),'abcde')}

zip函数

zip(s,t)函数将列表s和列表t组成一个元组列表(s[0],t[0])、(s[1].t[1])等,如果s和t长度不等,则以短的长度为止。

zip函数在python2中会完全创建一个元组列表,函数itertools.izip一次只生成一个元组,性能较好

xrange and range

range:直接生成一个列表对象
xrange:生成一个xrange对象。当需要生成比较大的数据,内存比较紧张,xrange比较省内存。xrange一般用在循环里面,比如只需要操作部分数据,而不是返回全部元素来完成操作的情况
for m in range(1000): #一次性生成1000个数字
if m == 10:
print "ss"
break
for m in xrange(1000): #只生成10个数字
if m == 10:
print "ss"
break
在python3种xrange()函数已经更名为range(),并且已经删除了老式range()函数的功能。

tuple 元组

一旦初始化就不能修改,括号,逗号分隔。不能原地修改,不能排序。

classmates = ('Michael', 'Bob', 'Tracy')
tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,
只有1个元素的tuple定义时必须加一个逗号,防止歧义(以下两种方式都可以)

t = (1,)
t = 1,    #即使没有圆括号,python也可以识别出元组

以下示例看起来元组被改变了,查看id发现元组对象已经被改变了
a = (1,2)
b = list(a)
type(b)
b[0] = 5
a = tuple(b)
print a
type(a)

dict 字典

花括号,逗号分隔,key和value使用冒号分隔,key唯一,value不一定唯一.无序,不能通过偏移取值。可变类型,可嵌套。

创建一个空字典
d = {}
d = dict()
组成字典的键必须是不可变的数据类型,比如数字、字符串、元组等,列表等可变类型不可作为键
d = {'Michael': 95,'Bob': 75, 'Tracy': 85} #创建字典
d['Michael']
d['Adam'] = 67 #增加数据或者更新数据
del d['Michael'] #删除字典元素
'Thomas' in d #判断是否存在KEY d.has_key('Thomas')

字典的方法

d.clear() #清空
d.get('Thomas')
d.get('Thomas', -1) #如果不存在Thomas则返回-1
d.pop('Bob') #删除一个Key,对应的value也删除
d.update({'Michael': 99})
d.keys() #返回键的列表 等同于list(d)
d.values() #返回值的列表
d.items() #生成一个字典的容器 [()]

dict函数

items=[('name','grb'),('age',42)]
d=dict(items) #或者通过关键字创建 d=dict(name='grb',age=42)
print d

set 集合

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。没有顺序的概念,所以不能切片和索引操作。
t = set("hello") #创建一个唯一字符的集合
t
s = set([1, 2, 3])
s
s.add(4) #添加一项
s.update([7,8,9,10]) #添加多项
s.remove(4) #删除一项
成员操作关系 in 、not in
交集( & )、并集( | )、差集( - )、对称差集(^)
a = t | s
b = t & s
c = t - s
d = t ^ s #t和s中,但不同是在t和s中
判断集合是否相等与顺序无关 print set('abc') == set('bac')
列表的去重:
a = [1,2,3,3,4,4,5]
b=list(set(a))

frozenset()不可变集合

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

推荐阅读更多精彩内容