- Number:数字
- int:有符号整型
- long:长整型,3.x版本由int代替。l、L字符结尾
- float:浮点型
- complex:复数
- int:有符号整型
- String(字符串)
- 正负值索引,0第一个,-1倒数第一个。
- 支持[beg : end]截取字符串。
- List(列表)
- lua 数组形式的table
- Tuple(元组)
- 只读列表
- Dictionary(字典)
- 键值对
Set(集合)
- 元素不重复,内部会自动过滤
不可更改对象(immutable)
- 内部元素值不可改变
- String
- Number
- tuple
- 元素内部是否可以改变,不做要求,比如元素是列表。
- • 可更改对象(mutable)
int | long | float | complex |
---|---|---|---|
10 | 51924361L | 15.20 | 3.14j |
-786 | -0x19323L | -21.9 | 45.j |
080 | 0122L | 32.3e+18,科学计数法 | 9.322e-36j |
-0490,八进制 | 0xABCDEFl | -90. | .876j |
-0x260,16进制 | -052335L | -32.54e100 | -.6545+0J |
0x69 | -472129L | 70.2E-12 | 3e+26J |
4.53e-7j |
二、string(字符串)
只要字符串,没有字符的概念。
string = 'word' #单引号,不可以换行
string = "this is fucker." #双引号
#三引号,可以换行,
string = '''
<HTML><HEAD><TITLE> '""'"可以有双引号、单引号
Friends CGI Demo</TITLE></HEAD> \r\n\t\v可以有转义字符
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK="window.history.back()"></FORM>
</BODY></HTML>
'''
#同上,三引号,可以换行
string = """
CREATE TABLE users (
login VARCHAR(8),
uid INTEGER,
prid INTEGER)
"""
string = u'Hello World !' # Unicode 字符串
string[1] #1
string[-1] #6
string[1:5] #'1234',左闭右开区间,和C++一样。返回的是新的串,并不会截断str本身。
string[1:] #123456
string[:3] #012
string[:] #返回一个string的拷贝。
string * 2 #'01234560123456'
print string + "TEST" # '0123456TEST',字符串连接
转义字符
\ #在行尾时,续行符
\\ #反斜杠符号
\' #单引号
\" #双引号
\a #响铃
\b #退格(Backspace)
\e #转义
\000 #空
\n #换行
\v #纵向制表符
\t #横向制表符
\r #回车
\f #换页
\oyy #八进制数,yy代表的字符,例如:\o12代表换行
\xyy #十六进制数,yy代表的字符,例如:\x0a代表换行
\other #其它的字符以普通格式输出
字符串运算符
stra, strb = "stra", "strb"
stra + strb #strastrb
stra * 2 #strastra
stra[1] #t
stra[1:2] #t
"a" in stra #True
"a" not in stra #False
#不转义字符串中的转义字符,原模原样的输出。
r"\v\r\n\t\000" #"\\v\\r\\n\\t\\000"
R"\v\r\n\t\000" #"\\v\\r\\n\\t\\000"
format % str1, ... #格式化字符
#与C 中 sprintf 函数一样的语法
"my name is %s, im %d years old" % ("bitch", 100) #这是使老版的格式化方法,已经有str.format优化
#my name is bitch, im 100 years old
格式说明符
#######################字符串格式说明符#######################
%c #格式化字符及其ASCII码
%s #格式化字符串
%d #格式化整数
%u #格式化无符号整型
%o #格式化无符号八进制数
%x #格式化无符号十六进制数
%X #格式化无符号十六进制数(大写)
%f #格式化浮点数字,可指定小数点后的精度
%e, %E #用科学计数法格式化浮点数
%E #作用同%e,用科学计数法格式化浮点数
%g #%f和%e的简写
%G #%F 和 %E 的简写
%p #用十六进制数格式化变量的地址
#######################格式说明符辅助指令#######################
* #定义宽度或者小数点精度
- #用做左对齐
+ #在正数前面显示加号( + )
<sp> #在正数前面显示空格
# #在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')
0 #显示的数字前面填充'0'而不是默认的空格
% #'%%'输出一个单一的'%'
(var) #映射变量(字典参数)
m.n. #m是显示的最小总宽度,n 是小数点后的位数(如果可用的话)
格式化函数format
str.format() #{} 和 : 来代替以前的 %
"{} {}".format("hello", "world") # 位置参数,按默认顺序
"{0} {1}".format("hello", "world") # 位置参数
"{1} {0} {1}".format("hello", "world") # 位置参数,'world hello world'
"a:{f1}, b:{f2}".format(f1="f", f2="f") # 关键字参数,"a:f, b:f"
"a:{0}, b:{f2}".format("f", f2="f") # 位置参数好关键字参数可以组合
args = {"f1": "f", "f2": "f"}
print("a:{f1}, b:{f2}".format(**args)) # 字典参数,"a:f, b:f"
print("a:{0[f1]}, b:{0[f2]}".format(args)) # 同上
mlist = ['f1', 'f2']
print("a:{0[0]}, b:{0[1]}".format(mlist)) # 列表参数,"0" 是必须的
class Obj(object):
def __init__(self, value):
self.value = value
obj = Obj(6)
print('value = {0.value}'.format(obj)) # 对象参数,"0" 是可选的
format的格式化符号
{:b} 11 1011
{:d} 11 11
{:o} 11 13
{:x} 11 b
{:#x} 11 0xb
{:#X} 11 0XB
{:.2f} 3.141 3.14 保留小数点后两位
{:+.2f} 3.141 +3.14 带符号保留小数点后两位
{:+.2f} -1 -1.00 带符号保留小数点后两位
{:.0f} 2.71 3 不带小数
{:0>2d} 5 05 数字补零(填充左边, 宽度为2)
{:x<4d} 5 5xxx 数字补x(填充右边, 宽度为4)
{:x<4d} 10 10xx 数字补x(填充右边, 宽度为4)
{:,} 1000 1,000 以逗号分隔的数字格式
{:.2%} 0.25 25.00% 百分比格式
{:.2e} 100 1.00e+02 指数记法
{:>10d} 13 ________13 右对齐(默认, 宽度为10)
{:<10d} 13 13________ 左对齐(宽度为10)
{:^10d} 13 ____13____ 中间对齐(宽度为10)
格式化字符串
f-字符串,在字符串前加f/F,在字符串中通过{expression}来包含表达式的值。
import math
print(f'pi = {math.pi:.3f}.') #:冒号后面可以接格式说明符
table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
for name, phone in table.items():
print(f'{name:10} ==> {phone:10d}')
#Sjoerd ==> 4127
#Jack ==> 4098
#Dcab ==> 7678
#'!a'调用ascii()
#'!s'调用str()
#'!r'调用repr():
string = 'fucker'
print(f'{string}.') #fucker
print(f'{string!r}') #'fucker'
三、list(列表)
最基本,最常用数据类型。
元素可以是字符,数字,字符串、列表,类型可缓和。
支持[beg : end]截取(注意返回的是副本),支持正负值索引,都和string一样。
“隐式索引的“lua table”。
#列表
lst = [ '0', '1', '2', '3', '4', '5', '6' ]
#[beg : end]和string一样。
lst[1:4:2] #for循环三参数for(i=1;i<4;i+=2)
lst = [ '0', 1 , 2.0, '3', 4.0 ]
f1, f2, f3, f4, f5 = tupl1 # 序列解包:左侧数量=tupl1的元素数量,同样适用于元组。
tinylist = [5, '6']
print(tinylist * 2) #输出列表两次
#[1, '2', 1, '2']
print(lst + tinylist) #打印组合的列表
#['0', 1 , 2.0, '3', 4.0, 5, '6']
len(lst) #列表长度
lst.append('Runoob')
del lst[2] #删除元素
常用函数和方法
##################函数##################
cmp(list1, list2) #比较两个列表的元素
len(list) #列表元素个数
max(list) #返回列表元素最大值
min(list) #返回列表元素最小值
list(iterable) #通过迭代器构建列表
##################成员方法##################
#诸如insert、remove、sort方法,只修改列表,没有返回值,这是Python中所有可变数据结构的设计原则。
list.append(x) #在列表的末尾添加一个元素。相当于 a[len(a):] = [x] 。
list.count(obj) #统计某个元素在列表中出现的次数
list.extend(iterable) #使用可迭代对象中的所有元素来扩展列表。相当于 a[len(a):] = iterable 。
list.index(obj) #从列表中找出某个值第一个匹配项的索引位置
list.index(x[, start[, end]])
#返回第一个值为x的索引,start、end可选,限制搜索范围,没找到将会抛出 ValueError 异常
list.insert(index, obj) #将对象插入列表
#a.insert(0, x)插入列表头部
#a.insert(len(a), x)等同于a.append(x)
list.pop(index=-1) #移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj) #移除列表中第一个值为 obj 的元素,如果没有这样的元素,则抛出 ValueError 异常。
list.reverse() #翻转列表中的元素。
list.clear() #移除列表中的所有元素。等价于 del a[:]
list.copy() #返回列表的一个浅拷贝,等价于 a[:]。
list.sort(key=None, reverse=False) #排序,使用内置函数sorted排序
list.sort(cmp=None, key=None, reverse=False) #对原列表进行排序
创建列表常用技巧
lst = []
for i in range(10):
lst.append(i)
squares = list(map(lambda x: x**2, range(10))) #map见内置函数说明,返回一个迭代器
squares = [x**2 for x in range(10)] #列表推导式
列表推导式
#expression for... for... if...
# 推导式的结构。
# expression可以是任何表达式,比如是另一个推导式(嵌套)
# 后面接1个或多个for、if语句。
# 效果:
# for ...
# for ...
# if ...
# expression()
#列表的推导式:[expression for... for... if...],返回一个列表
#集合的推导式:{expression for... for... if...},返回一个集合
[x for x in range(10)]
################等价于
lst = []
for x in range(10)
lst.append(x) #最后的效果就是lst.append(expression)
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
################等价于
lst = []
for x in [1,2,3]:
for y in [3,1,4]:
if x != y:
lst.append((x, y))
from math import pi
print([str(round(pi, i)) for i in range(1, 6)]) #复杂的表达式
#['3.1', '3.14', '3.142', '3.1416', '3.14159']
matrix = [
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
]
[[row[i] for row in matrix] for i in range(4)] #嵌套的推导式
################等价于 #记住一对[]堆成一个list列表
lst = []
for i in range(4)
lst.append([row[i] for row in matrix])
################等价于
lst = []
for i in range(4) #外层[],生成lst
lst_1 = []
for row in matrix: #内存[],生成lst_1
lst_1.append(row[i])
lst.append(lst_1)
list(zip(*matrix))
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
#zip效果如下;
#(iter_1, iter_2, ..., iter_n) = zip(lst_1, lst_2, ..., lst_n) lst可以换成所有可迭代对象
#参数是一个序列,序列的每个元素都是一个可迭代对象
#返回一个元组,元素是每个元素的迭代器。
列表作为栈使用
stack = [1, 2, 3, 4]
stack.append(5)
stack.pop()
stack.append(6)
stack.pop()
stack.pop()
四、tuple(元组)
只读List(列表),但元素本身可以是可改变对象。
列表[]方括号,元组()圆括号。
支持上面string、list的操作。
tup1 = ( '1', 2 , 300, '4', 5 )
tup1 = 50 , # 同上,等价于tup1 = (50)
tup1 = 1, 2, 3 # 等价于(1, 2, 3, 4),叫序列打包
x, y, z = tupl1 # 左侧数量=tupl1的元素数量,叫序列解包,同样适用于list
x, y, z = 1, 2, 3 # 多重赋值,本质上就是右侧序列打包成元组,左侧序列解包。
tup1[2] = 1000 # 错误,不可以修改删除元组元素,只能读取。
del tup1[2] # 错误
tup3 = tup1 + tup2 # 可以元组进行连接组合,不改原元组,生成新元组。
#任意无符号的对象,以逗号隔开,默认为元组,如:
print '1', -2, 3.0, '4' # 元组
x, y = 1, 2
print "x, y:", x, y # 元组
常用函数
列表的函数都有,但是成员方法都没有。
cmp(tuple1, tuple2) #比较两个元组元素。
len(tuple1) #计算元组元素个数。
max(tuple1) #返回元组中元素最大值。
min(tuple1) #返回元组中元素最小值。
tuple(seq) #将列表转换为元组。
五、Dictionary(字典)
列表是有序对象集合(索引从0开始递增)
字典是无序对象集合,key-value形式。
- 关键字key
- 可以重复,但后者覆盖前者。
- 不可改变,可以是字符串、数字、元组,列表就不行。
- 如果是元组,则必须只包含字符串、数字或元组,否则不能作为key
- 访问不存在的key,会KeyError。
- 元素值value
- 任意类型
- 值不唯一
类似lua table。
##############创建
d = {}
d = {1:1, '2':2, 3.0:'3.0'}
d = dict(fuck=1, shit=2, bitch=3) #key是字符串时,最常见用法
d = dict([('1', 1), ('2', 2), ('3', 3)]) #{'1': 1, '2': 2, '3': 3}
#内置函数dict(),更多用法见《Python_内置函数》
#字典推导式创建,推导式介绍见列表,列表、集合、字典都支持推导式。
{x: x**2 for x in (2, 4, 6)} #{2:4, 4:16, 6:36}
##############查插删改
d['1'] = "one" #添加元素
d[ 2 ] = "two" #添加元素
'one' in d #元素是否存在
list(d) #返回字典的key的列表,['1', 2],按插入次序排列,如需其他排列,sorted(d)
del d["2"] #删除元素
d.clear() #清空字典:删除全部元素
print d['one'] # 输出键为'one' 的值
print d[2] # 输出键为 2 的值
print d[1] # KeyError,不存在的Key
print d # 输出完整的字典
print d.keys() # 输出所有键
print d.values() # 输出所有值
常用函数和方法
##################函数##################
cmp(dict1, dict2) #比较两个字典元素。
len(dict) #计算字典元素个数,即键的总数。
str(dict) #输出字典可打印的字符串表示。
type(variable) #返回输入的变量类型,如果变量是字典就返回字典类型。
##################成员方法##################
dict.clear() # 删除字典内所有元素
dict.copy() # 返回一个字典的浅复制
dict.fromkeys(seq[, val]) # 创建一个新字典
# 以seq元素为key,val为key初始值
dict.has_key(key) # dict是否有key键。
dict.items() # 返回列表,元素为(k, v)元组。
dict.keys() # 返回key列表。
dict.values() # 返回value列表
dict.update(dict2) # 把dict2的kv更新到dict里
dict.get(key, default=None) # 返回指定键的值,不存在,返回default
dict.setdefault(key, default=None) #如果key不存在,添加key,value=default
pop(key[,default]) #删除kv,并返回value,不存在返回default
popitem() #返回并删除字典中的最后一对键和值。
六、Set(集合)
由不重复元素组成的无序的集,它的基本用法包括成员检测和消除重复元素。集合对象也支持像联合,交集,差集,对称差分等数学运算。
###########{}括号创建
set1 = {1, 2, 3, 4, 1, 2, 3, 4} #集合,{1, 2, 3, 4}
set1 = {} #这不是集合,是字典。
###########set()函数创建
set(iterable) #参数是一个可迭代对象
set1 = set("abcdabcdabcd") #set1 = {'a', 'b', 'c', 'd'}
set1 - set2 #差集,在set1,不在set2的元素集合
set1 | set2 #并集,在set1或者set2中的元素集合
set1 & set2 #交集,在set1且在set2的元素集合
set1 ^ set2 #异或,不同时在set1、set2中的元素的集合。
#集合推导式,推导式的介绍,见列表中。
a = {x for x in 'abracadabra' if x not in 'abc'}
a #{'r', 'd'}
七、操作技巧
相互类型转换
#以数据类型名字作为函数,返回一个新的对象。
int(x [,base]) #将x转换为一个整数
long(x [,base] ) #将x转换为一个长整数
float(x) #将x转换到一个浮点数
str(x) #将对象 x 转换为字符串
repr(x) #将对象 x 转换为表达式字符串
complex(real [,imag]) #创建一个复数
eval(str) #用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s) #将序列 s 转换为一个元组
list(s) #将序列 s 转换为一个列表
set(s) #转换为可变集合
dict(d) #创建一个字典。d 必须是一个序列 (key,value)元组。
frozenset(s) #转换为不可变集合
chr(x) #将一个整数转换为一个字符
unichr(x) #将一个整数转换为Unicode字符
ord(x) #将一个字符转换为它的整数值
hex(x) #将一个整数转换为一个十六进制字符串
oct(x) #将一个整数转换为一个八进制字符串
序列循环技巧
序列:字符串、列表、元组、集合和字典
###################循环字典d.items()
for k, v in d.items():
print(k, v)
###################循环非字典序列,enumerate()函数
for i, v in enumerate(['1', '2', '3']):
print(i, v)
###################多个序列同时循环
lst1 = ['1', '2', '3']
lst2 = ['4', '5', '6']
for q, a in zip(lst1, lst2):
print('{0}:{1}'.format(q, a))
###################逆向循环
for i in reversed(range(1, 10, 2)):
print(i)
###################指定顺序循环
lst = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
for f in sorted(set(lst)):
print(f)
#apple
#banana
#orange
#pear
###################循环中插删元素,一般创建一个新表才安全。
import math
raw_data = [56.2, float('NaN'), 51.7, 55.3, 52.5, float('NaN'), 47.8]
filtered_data = []
for value in raw_data:
if not math.isnan(value):
filtered_data.append(value)
print(filtered_data)
#[56.2, 51.7, 55.3, 52.5, 47.8]