数字类型可分为数值类和布尔类型。数值类又分为整型和浮点型两种。
python3中取消了short,long类型,统一用int表示整数。取消了double类型,统一用float表示,这里的float就是其他语言中的双精度double
使用方法type(a)
,可以获知参数a的类型
type(-1)
type(1.1)
type(1 * 1)
type(1 + 0.1)
python3中默认/
为浮点除法,用//
表示整除
type(2 // 2)
生活中常用的进制是10进制,计算机中常用的是2、8、16进制。
python3中默认进制为10进制。想要显示的表示2进制可以使用0bxxx
这样的方式,如0b11
表示10进制的3。同理,8进制和16进制可以使用0oxxx
,0xaaa
的方式表示,如0o10
,0x1F
,分别表示10进制的8和31
存在进制就有进制转换的问题。python3中提供了下列方法进行进制转换:
int(a)
将某进制数a转换成10进制数bin(a)
将某进制数a转换成2进制数oct(a)
将某进制数a转换成8进制数hex(a)
将某进制数a转换成16进制数hex_num = 0b111111 # 初始化一个二进制数
int(hex_num)
bin(hex_num)
oct(hex_num)
hex(hex_num)
int(True)
int(False)
所有非0值都为True
bool(1)
bool(0)
bool(2)
bool(-1)
bool(0)
所有非空值皆为True
bool('abc') # 非空字符串
bool('') # 空字符串
bool([]) # 空列表
bool({}) # 空字典
bool({1,2,3}) # 非空集合
Python中有一个专门表示“空”这一概念的值——None
bool(None)
复数表示方法很简单,在数值后加上标识符j
即可。如36j
type(36j)
字符串是使用单引号`,双引号" "
,和三引号"""
/''' '''
包括的内容。
'hello world'
1
'1'
type(1)
type('1')
"hello"
type("hello")
用于表示字符串类型的引号必须成对出现,而在表征字符串的引号中插入其他类型的引号不会有问题,即便不成对。如果是同类型的引号可以使用\
进行转义。
'let's go'
'let"s go'
'let\'s go'
python建议每行字符数不超过80,当字符串内容超长,可以使用三引号来表示
'''
hello world
hello world
'''
"""
hello world
hello world
hello world
"""
不仅可见的abc这样的字符会被录入,回车符虽不可见带也会被录入,最后表现为\n
的形式。
如果想在一行字符串中自定换行,可以使用print()
搭配转义字符\n
。
""" hello world \n hello world\nhello world\n"""
print("""hello world \nhello world\nhello world\n""")
print('hello world \n hello world\nhello world\n')
单引号和双引号内内容的换行,可以选择字符串行尾加上\
"""hello world
hello world"""
'hello\
world'
在输入文字中有下列情况需要特殊处理:
'
所以有了转义字符,形式为\
+字母
,比如说\r
回车,\n
换行,\t
横向制表符,或者是\'
为了输出'
\r
与\n
的区别¶
\r
——移动光标至行首
\n
——光标下移一格
不同系统对于换行
采取的方式不同
\n
;\n\r
;\r
Python能根据系统自动判别换行符的形式。但对如下输入,不同系统结果是一致的:
print aaaa \r bbbb
print aaaa \n bbbb
输出
bbbb
aaaa
bbbb
print('aaaa \r bbbb')
print('aaaa \n bbbb')
当想要将\n
本身作为字符串内容输出时,有两种方式,一是对\
进行转义操作,即\\
,另一种是在字符串前加上标志符r
print('c:\north\northwest')
print('c:\\north\\northwest')
注意,转换字符串为原始字符串的前提是字符串本身合法
r'let"s go'
r'let's go'
字符串同数字一样,存在一些基本的四则运算操作,+
用来拼接字符串,*
用来复制字符串,必须是一个字符串和一个数做乘积
"hello"+" world"
"hello "*3
"hello"*"world"
为了获取字符串中特定位置的元素,可以在字符串后加上[num]
,表明希望取到num位置的元素。
num为正时,从左往右,从0开始计数。为负时,从右往左,从-1开始计数
"hello world"[0]
"hello world"[4]
"hello world"[-1]
"hello world"[-3]
为了获取字符串中的一段,使用[start:end]
的方式获取[start,end)
范围内的字符串内容,start
小于end
时为空
"hello world"[0:4]
"hello world"[0:5]
"hello world"[0:-1]
"hello world"[-2:2]
为了取到全部的字符串,特别是末尾的元素,可以令end>=str.length
,当不写start
和end
时,默认为从头开始取,和一直取到尾
"hello world"[6:11] # 空格也是一个字符
"hello world"[6:20]
"hello world"[6:]
"hello world"[:-4]
"hello world"[-5:]
type([1,2,3,4,5,6])
type(["hello","world",1,9])
type(["hello","world",1,9,True,False])
type([[1,2],[True,False]])
列表的基本操作常用的有取值,截取(切片),列表拼接(加法),列表复制(乘法)
["新月打击","苍白之暴","月神冲刺","月之降临"][0]
["新月打击","苍白之暴","月神冲刺","月之降临"][3]
["新月打击","苍白之暴","月神冲刺","月之降临"][0:2]
["新月打击","苍白之暴","月神冲刺","月之降临"][-1:]
["新月打击","苍白之暴","月神冲刺","月之降临"]+['点燃','虚弱']
['点燃','虚弱']*['点燃','虚弱'] # 必须是 list * 数字
['点燃','虚弱']*3
留心列表无减法操作(字符串同理)
['点燃','虚弱']-['点燃']
'aaa' - 'a'
元组是另一个表示“组”概念的数据类型。使用(xxx)
表示。和列表一样,数据类型可以不一致。基本操作也是基本一致的。
(1,2,3,4,5)
type((1,2,3,4,5))
(1,'-1',True)
(1,2,3)[0]
(1,2,3,4)[0:2]
(1,2,3)+(4,5,6)
(1,2,3)*3
()
本身即是元组标识,也是数学运算符。
(1)*2
(1)
type((1))
type(('string'))
为了避免歧义,python默认当括号内只有一个元素时,()
作数学运算符处理。为了表示只有一个元素的元组,可以参考下法,列表等则无此问题
(1,)
type((1,))
type([1])
空元组表示方式很简单,单纯的()
即可
type(()) # 空元组
[]
取值'hello world'[2]
[1,2,3][2]
[1,2,3,4,5][0:3]
"hello world"[0:8:2]
[0:8:2],最后一个参数表示 步长
3 in [1,2,3,4,5,6]
2 not in [1,2,3,4,5,6]
len([1,2,34,5])
len('hello world')
max([1,2,3,4,5,6])
min('abcde')
字符可以比大小是因为所有字符都是经过编码的,即每一个字符都有一个特定的值对应,我们叫做 ascll码 ,使用ord()
可以获取参数的ascll码
ord('a')
ord(' ') # 空格符也有ascll码
说完序列的有序,该说无序的了,即set,集合。用{}
表示。因为无序所以不能获取指定序号的元素,也就无从谈起切片(截取内容)了
type({1,2,3,4,5,6})
{1,2,3,4,5,6}[0]
{1,2,3,4,5,6}[0:1]
集合可以存放不同类型数据,但必须是能哈希化的数据(即数值不变性),列表不能哈希化
{1,2,'3',[1,2,3]}
{1,2,'3',(1,2,3)}
python的集合元素也有特异性,无序性的特点
{1,1,2,3,3,4}
{1,3,4,2,7}
集合支持和序列一样的存在性判断和长度获取操作。
len({1,2,3})
1 in {1,2,3}
4 not in {4,5,6}
集合最重要的是三个逻辑判断,差、交、并。
{1,2,3,4,5,6} - {1,3,5}
{1,2,3,4,5,6} & {1,3,5}
{1,2,3,4,5,6} | {3,5,7}
表示空集有些特殊,因为{}
表示的是另一个数据类型——字典的空值
type(set())
len(set())
字典类型是一种特殊的集合,采用键-值对形式构建。创建方式为{key:value,key:value,....}
。是集合当然不能角标访问,正确的方式是{k1:v1,...}[key]
,得到对应value
值
type({1:1,2:2,3:3})
{'Q':'新月打击','W':'苍白之瀑','E':'月之降临','R':'月神冲刺'}[0]
{'Q':'新月打击','W':'苍白之瀑','E':'月之降临','R':'月神冲刺'}['Q']
{'Q':'新月打击','W':'苍白之瀑','E':'月之降临','R':'月神冲刺'}['R']
虽然不会报错,但务必保证key唯一,否则丢数据算轻的
{'Q':'新月打击','Q':'苍白之瀑','E':'月之降临','R':'月神冲刺'}['Q']
{'Q':'新月打击','Q':'苍白之瀑','E':'月之降临','R':'月神冲刺'}
key必须是不可变类型(能哈希化),比如str、int、元组。value可以是任意类型,甚至可以嵌套字典
{1:'新月打击','1':'苍白之瀑','E':'月之降临','R':'月神冲刺'}
type({'Q':'新月打击','W':'苍白之瀑','E':{1:1},'R':'月神冲刺'})
{[1,2]:'新月打击','W':'苍白之瀑','E':'月之降临','R':'月神冲刺'}
{(1,2):'新月打击','W':'苍白之瀑','E':'月之降临','R':'月神冲刺'}