python 数据类型与运算符

一、运算符

算术运算

+ 加
- 减
* 乘
/ 除
% 取余(相除后的余数)
** 取幂(注意 ^ 并不执行该运算,你可能在其他语言中见过这种情形)
// 相除后向下取整到最接近的整数

按位运算

x << y 左移Y位 
3<<2:解法:11向左移动两位变为1100,即12 .

x >> y 右移Y位
3>>2:解法:11向右移动两位变为0.

x & y 按位与,都为1为1,否则为0
3&5 :解法:3的二进制补码是 11,  5的是101, 3&5也就是011&101,先看百位(其实不是百位,这样做只是便于理解) 一个0一个1,根据(1&1=1,1&0=0,0&0=0,0&1=0)可知百位应该是1,同样十位上的数字1&0=0,个位上的数字1&1=1,因此最后的结果是1

x | y 按位或,都为0为0,否则为1
4|7: 解法:按位并的计算规律和按位与的很相似,只不过换了逻辑运算符,并的规律是: 1|1=1 ,1 |0=1, 0|0=0\.   4|7转换位二进制就是:100|111=111\.  二进制111即为十进制的7.小技巧:利用按位并可以将任意二进制数的最后一位变为1,即就是X|1.

~ x 按位取反,方法:   将二进制数+1之后乘以-1,x的按位翻转是-(x+1) . 注意,按位运算符是单目运算符.
~3  :解法:3的二进制是11, -(11+1)=-100B=-4D. (注:B和D分别表示二进制和十进制).

x ^ y 按位异或,对位相加,特别要注意的是不进位
1^1:解法:1+1=0.(本来二进制1+1=10,但不能进位,所以结果是0)

赋值运算符

=
所有单目运算符加上=

比较运算符

符号使用情况          布尔型      运算符
5 < 3                False      小于
5 > 3                True       大于
3 <= 3               True       小于或等于
3 >= 5               False      大于或等于
3 == 5               False      等于
3 != 5               True       不等于

逻辑运算符

逻辑使用情况          布尔型     运算符
5 < 3 and 5 == 5    False     and - 检查提供的所有语句是否都为 True
5 < 3 or 5 == 5     True      or - 检查是否至少有一个语句为 True
not 5 < 3           True      not - 翻转布尔值

恒等运算符

关键字 运算符
is 检查两边是否恒等
is not 检查两边是否不恒等

二、数据类型

Number 数字类型

Number可以用到两种 python 数据类型:

int - 表示整数值
float - 表示小数或浮点数值

常用数字函数:

函数 返回值
abs(x) 返回数字的绝对值,如abs(-10) 返回 10
ceil(x) 返回数字的上入整数,如math.ceil(4.1) 返回 5exp(x) 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
fabs(x) 返回数字的绝对值,如math.fabs(-10) 返回10.0
floor(x) 返回数字的下舍整数,如math.floor(4.9)返回 4
log(x) 如math.log(math.e)返回1.0,math.log(100,10)返回2.0
log10(x) 返回以10为基数的x的对数,如math.log10(100)返回 2.0
max(x1, x2,...) 返回给定参数的最大值,参数可以为序列。
min(x1, x2,...) 返回给定参数的最小值,参数可以为序列。
modf(x) 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
pow(x, y) x**y 运算后的值。
round(x [,n]) 返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。
sqrt(x) 返回数字x的平方根。

Bool 布尔类型

True 为真
False 为假

非0都为True
0为假
可以与Number类型进行强制转换,特别注意,要写布尔类型时,务必不要带引号,“True”是字符串类型,True才是布尔型。

String 字符串类型

String用到的python数据类型:

  str

可以使用双引号 " 或单引号 ' 定义字符串。

String运算
假设a = Hello,b = Python

操作符 描述 实例
+ 字符串连接 a + b 输出结果: HelloPython
* 重复输出字符串 a*2 输出结果:HelloHello
[] 通过索引获取字符串中字符 a[1] 输出结果 e
[ : ] 截取字符串中的一部分,含头不含尾 a[1:4] 输出结果 ell
in 成员运算符 - 如果字符串中包含给定的字符返回 True 'H' in a 输出结果 1
not in 成员运算符 - 如果字符串中不包含给定的字符返回 True 'M' not in a 输出结果 1

String内常用转义字符

转义字符 描述
\ (在行尾时) 续行符
\ \ 反斜杠符号
\ ' 单引号
\ " 双引号
\ b 退格(Backspace)
\ n 换行
\ r 回车
\ f 换页
\ oyy 八进制数,yy代表的字符,例如:\o12代表换行
\ xyy 十六进制数,yy代表的字符,例如:\x0a代表换行

String常用方法

方法 功能
capitalize() 将字符串的第一个字符转换为大写
count(str, beg= 0,end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
find(str, beg=0 end=len(string)) 检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
len(string) 返回字符串长度
lower() 转换字符串中所有大写字符为小写.
lstrip() 截掉字符串左边的空格或指定字符。
max(str) 返回字符串 str 中最大的字母。
min(str) 返回字符串 str 中最小的字母。
replace(old, new [, max]) 把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。
rstrip() 删除字符串字符串末尾的空格.
split(str="", num=string.count(str))num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符串
strip([chars]) 在字符串上执行 lstrip()和 rstrip()
swapcase() 将字符串中大写转换为小写,小写转换为大写
title() 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
upper() 转换字符串中的小写字母为大写

List列表类型

    list 使用方括号创建列表
  • 使用列表的索引对列表的项进行查看与更新,注意是从0开始计数的,列表第一项索引为0,还可以使用复数进行索引,-1代表倒数第一项。
    例:
>>> lst_of_random_things = [1, 3.4, 'a string', True]
>>> lst_of_random_things[1]
3.4
>>> lst_of_random_things[-1]
True
  • 列表也可进行切片操作,类似字符串切片,含头不含尾,负数同样代表倒数第几项。
    例:
>>> lst_of_random_things = [1, 3.4, 'a string', True]
>>> lst_of_random_things[1:2]
[3.4]
>>> lst_of_random_things[:2]
[1, 3.4]
>>> lst_of_random_things[1:]
[3.4, 'a string', True]
>>> lst_of_random_things[-1:]
[True]

注意到上面,索引时,取一项是个变量,切片时即使取一项,也是个列表。

列表运算

Python 表达式 结果 描述
len([1, 2, 3]) 3 长度
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合
max([1,2,3]),min([1,2,3]) 3,1 最大,最小
['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复
3 in [1, 2, 3] 或1 not in [1,2,3 ] True False 元素是否存在于列表中
for x in [1, 2, 3]: print(x, end=" ") 1 2 3 迭代

列表方法

方法 功能描述
list.append(obj) 在列表末尾添加新的对象
list.count(obj) 统计某个元素在列表中出现的次数
list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
list.insert(index, obj) 将对象插入列表
list.pop(obj=list[-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj) 移除列表中某个值的第一个匹配项
list.reverse() 反向列表中元素
list.sort([func]) 对原列表进行排序
list.clear() 清空列表
list.copy() 复制列表
"str".join(list) 将列表项用str连接起来

Tuple元组类型

tuple 常用小括号,不过小括号是可选选项,如果小括号并没有对解释代码有影响,程序员经常会忽略小括号

元组同list列表,是有序存储的对象集合,可以用索引查找,但是与列表不同的是,元组不可变,你无法向元组中添加项目或从中删除项目,或者直接对元组排序。
修改元素是非法的,但可以进行+,*,for,in的运算
删除元素是非法的,只能删除整个元组

元组还有个特性叫元组解包,还可用*来解包,如下:

dimensions = 52, 40, 100
length, width, height = dimensions
print("The dimensions are {} x {} x {}".format(length, width, height))

例二:

a = 1,2,3
print(*a)
#输出
1 2 3
#如果直接输出a应该是(1,2,3)

Set集合类型

集合是一个包含唯一元素的可变无序集合数据类型。集合的一个用途是快速删除列表中的重复项。

set()或者{}来表示

集合和列表一样支持 in 运算符。和列表相似,你可以使用 add 方法将元素添加到集合中,并使用 pop 方法删除元素。但是,当你从集合中拿出元素时,会随机删除一个元素。注意和列表不同,集合是无序的,因此没有“最后一个元素”。
Set集合常用操作举例
如图理解

集合操作

1》交集
>>> x={1,2,3,4}
>>> y={3,4,5,6}
>>> x
set([1, 2, 3, 4])
>>> y
set([3, 4, 5, 6])
>>> x&y
set([3, 4])
>>> x.intersection(y)
set([3, 4])
2》并集
>>> x | y #集合并集
set([1, 2, 3, 4, 5, 6])
>>> x.union(y)
set([1, 2, 3, 4, 5, 6])
3》差集
>>> x-y # x与y的差集
set([1, 2])
>>> x.difference(y)# x与y的差集
set([1, 2])
>>> y-x # y与x的差集
set([5, 6])
>>> y.difference(x)# y与x的差集
set([5, 6])
4》对称差集
>>> x^y
set([1, 2, 5, 6])
>>> y^x
set([1, 2, 5, 6])
>>> x.symmetric_difference(y)
set([1, 2, 5, 6])
>>> y.symmetric_difference(x)
set([1, 2, 5, 6])
5》集合的子集和超集
>>> x
set([1, 2, 3, 4])
>>> z
set([1, 2, 3])
>>> z.issubset(x)#z是x的子集
True
>>> x.issuperset(z)#x是z的超集
True

Dictionary 字典

字典是存储的是唯一键到值的映射,键不能重复!如果给重复的键赋值,只会保留最后一次赋值的值。另外键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。
我们可以像检查某个值是否在列表或集合中一样,使用关键字 in 检查值是否在字典中。

dict 常用大括号{key:value}表示(注意如果没有key:value则为set)

操作

  • 访问字典的值:通过键索引
  • 修改字典的值:通过建索引
  • 删除字典元素,del 字典名[键索引]
  • 清空字典,字典名.clear()
  • 删除字典,del 字典名

字典Dict方法

方法 功能描述
radiansdict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
radiansdict.items() 以列表返回可遍历的(键, 值) 元组数组
radiansdict.keys() 以列表返回一个字典所有的键
radiansdict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
radiansdict.update(dict2) 把字典dict2的键/值对更新到dict里
radiansdict.values() 以列表返回字典中的所有值
pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
popitem() 随机返回并删除字典中的一对键和值(一般删除末尾对)。

三、可变性与不可变性

可变性是指对象创建完毕后,我们是否可以在原内存下更改该对象。如果对象(例如列表或字符串)可以更改(地址不变的情况下,修改内容),则是可变的。但是,如果无法更改对象以创建全新的对象(必须新生成一块内存来存修改后的值,例如字符串),则该对象是不可变的。

可变:list,dict
不可变:int,string,float,tuple

可变例子:

def dict_test(): 
  a = {} 
  b = a 
  print(id(a)) 
  a['a'] = 'hhhh' 
  print('id a:' + str(id(a))) 
  print('a:' + str(a)) 
  print('id b:' + str(id(b))) 
  print('b:' + str(b)) 
if __name__ == '__main__': 
  dict_test()

输出:

140367329543360

id a:140367329543360

a:{'a': 'hhhh'}

id b:140367329543360

b:{'a': 'hhhh'}

如图:


地址不变

不可变例子:

def int_test():
  i = 77 
  j = 77 
  print(id(77)) #140396579590760 
  print('i id:' + str(id(i))) #i id:140396579590760 
  print('j id:' + str(id(j))) #j id:140396579590760 
  print i is j #True 
  j = j + 1 
  print('new i id:' + str(id(i))) #new i id:140396579590760 
  print('new j id:' + str(id(j))) #new j id:140396579590736 
  print i is j #False 
if __name__ == '__main__': 
  int_test()

如图:


地址变了

特别注意:
在 python 中,类型属于对象,变量是没有类型的:

a=[1,2,3]
a="Runoob"

以上代码中,[1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是 List 类型对象,也可以指向 String 类型对象。

四、有序和无序

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

推荐阅读更多精彩内容

  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,916评论 17 410
  • 本文为《爬着学Python》系列第九篇文章。 从现在开始算是要进入“真刀真枪”的Python学习了。之所以这么说,...
    SyPy阅读 2,128评论 0 14
  • 第六章:数字 第七章:序列,列表,元组 1.序列 序列类型有着相同的访问模式:它的每一个元素可以通过指定一个偏移量...
    m风满楼阅读 873评论 0 2
  • 今天的文章是说创业者,但实际更多的,是想表达对那些坚持自己道路,并勇往直前的人。他们,是值得敬佩的。 陈强尼,这个...
    黑黑黑黑黑创阅读 1,301评论 0 0
  • 晚上8点和表弟一起校稿,等我把发现和质疑的错误及不当之处给他一一指出并修改完,已经快12点了。从茶社出来一身...
    七月紫苏阅读 125评论 1 0