1. Python数据结构
1.1 整数和浮点数
python的整数和浮点数与其他语言在表达和写法没有区别,使用1
,-1
,0
,800
等直接表示,也使用0x
开头表示十六进制数据,如0x9090
。
浮点数的写法可以使用简单数学写法,如1.323
,-9.21
。对于很大或很小的数,要使用科学计数法,如1.23x10^9
,可以写为1.23e9
。要注意到,整数的计算都是精确地,无论是乘法还是除法,但是浮点数本身是有精度的,所以浮点数的计算会对计算结果四舍五入到指定精度内。
python中空值使用None表达,和C中的NULL是一样的意思。
python的bool值也是True和False两种,可以使用and、or和not等逻辑运算符进行运算。
1.2 字符串和编码
python的字符串与其他低级或高级语言一致,采用‘’或“”括起来,使用\表示转义。一般python默认使用UTF-8编码,但为了进一步同一编码,并避免因为编辑器的原因导致编码混乱,需要在文件开头就指定编码格式:
# -*- encoding:UTF-8 -*-
python提供了很多工具来进行编码的转换和表示,对于单个字符,使用ord获得对应字符的编码,通过chr获得对应编码的字符表示。
>>> ord("A")
65
>>> chr(65)
'A'
也可以使用encode函数对字符串的编码格式进行强制转换,前面加入b,表示该字符串类型是byte,是最原始的以字节表示的字符串类型。
>>> '中华'.encode('utf-8')
b'\xe4\xb8\xad\xe5\x8d\x8e'
>>> 'china'.encode('ascii')
b'china'
可以通过len获取str的长度,单位是byte,但是如果不是使用utf-8编码的中文,获取时长度不一致。
>>> len('所以')
2
>>> len('所以'.encode('utf-8'))
6
因此,在编写含有中文的python代码时,务必保证使用统一的utf-8编码。
1.3 list和tuple
list列表
list列表表示一组有序的数据的集合,其使用和表达与数组基本很类似,但是有两点不同,首先在使用list索引时,不仅可以正序索引,还可以倒序索引,最后一个元素的index是-1。其次,list的元素可以是不同类型的数据,这一点在数组中是不允许的。在使用范围索引时,使用左闭右开区间表示,例如[1:3]表示1和2,不包含3.索引冒号的左侧值必须小于右侧值,其中,-1表示list最后一个值的索引,是最大的值。
>>> week=['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun']
>>> week
['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun']
>>> week[0]
'Mon'
>>> week[1]
'Tues'
>>> week[-1]
'Sun'
>>> week[-1:1]
[]
>>> week[-1:2]
[]
>>> week[1:-1]
['Tues', 'Wed', 'Thur', 'Fri', 'Sat']
>>> week[1:2]
['Tues']
>>> week[-3:-1]
['Fri', 'Sat']
对list的操作可以通过一系列函数实现,如append,insert,pop,也可以直接对元素内容进行赋值操作。
>>> week.append('888')
>>> week
['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun', '888']
>>> week.insert(-1, '666')
>>> week
['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun', '666', '888']
>>> week.pop()
'888'
>>> week
['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun', '666']
>>> week.pop(-1)
'666'
>>> week
['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun']
>>> week[-1] = 'what'
>>> week
['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'what']
list中元素的数据类型可以不一致,可以为整数、字符串,甚至是另一个list。list中包含另一个list的情况可以组成一个二维数组,同样的也可以组成三维、四维数组。
>>> workday=['Mon', 'Tues', 'Wed', 'Thur', 'Fri']
>>> weekend=['Sat', 'Sun']
>>>
>>> weekday=[workday,weekend]
>>> weekday
[['Mon', 'Tues', 'Wed', 'Thur', 'Fri'], ['Sat', 'Sun']]
>>> weekday[0][-1]
'Fri'
>>> weekday[1][-1]
'Sun'
tuple元组
tuple也是一种有序的数据集合,但是tuple一旦初始化之后,就不能修改了。tuple使用两个小括号()包含数据,其元素的数据类型可以不一致,可以包含整型、字符串、list和其他tuple。
在定义时,如果只有一个元素,需要在元素后面加“,”来避免歧义,
>>> tup=(1)
>>> tup
1
>>> tup=(1,)
>>> tup
(1,)
虽然元组初始化之后无法修改,但是这个无法修改指的是元素指向无法修改,可以通过在元组中使用list,来实现内容可变的元组,这一概念类似C中的const *和*const。
>>> tup
(1, 2, [3, 4])
>>> tup[2][0]=5
>>> tup[2][1]=6
>>> tup
(1, 2, [5, 6])
1.4 dict字典
python内置了dict数据类型,在别的语言中也叫map或key-value键值对。dict使用{}包含数据部分,其元素是一个key-value键值对,key需要使用不可变对象,这是因为dict通过hash算法来通过key计算得到value的地址,key值的微小改变,都会导致hash计算结果的巨大变化。但同样是因为使用hash算法来进行索引,所以索引的计算量随dict尺寸增加并不会由显著变化,大大提高了索引的效率,但是消耗了比较多的内存空间。这一点和list刚好相反。
>>> week={"Mon":11, 'Tues':22, 'Wed':33}
>>> week
{'Wed': 33, 'Mon': 11, 'Tues': 22}
>>> week['Mon']
11
>>> 'Mon'in week
True
>>> week.pop('Wed')
33
>>> week.get('Mon')
11
1.5 set集
set是一组key的集合,不储存value,且key不能重复且是无序的,这就是数学上集合的无序不重复的集合的概念,因此可以使用set进行集合的并集与或集运算。
set初始化时需要使用list作为输入,可以使用add添加key,也可以使用remove移除key,使用&
进行并集操作,使用|
进行或集操作。
>>> ll=[1,2,3]
>>> myset=set(ll)
>>> myset
{1, 2, 3}
>>> myset.add(4)
>>> myset
{1, 2, 3, 4}
>>> myset.add(4)
>>> myset
{1, 2, 3, 4}
>>> myset.remove(2)
>>> myset
{1, 3, 4}
>>> set2 = set([2,4,5])
>>> myset & set2
{4}
>>> myset | set2
{1, 2, 3, 4, 5}
set的key也不能放入可变对象,因为set的元素不允许重复,如果放入可变对象就无法判断set中的元素是否重复。因此,set无法放入list,会爆出错误unhashable type:list
>>> myset.add(ll)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
2. Python语句
2.1 条件判断语句
python的条件判断语句逻辑和其他语言一致,但是使用换行作为语句的分割点,而不是{},判断条件后加冒号(:)作为后续操作的开始。
if t == 1:
print("get")
else:
print("no")
2.2 循环语句
python常用的循环语句由while和for,用法上除了使用:结束条件判断以及使用缩减来表示代码逻辑块之外,在逻辑上和其他语言一致。
s = 0
num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in num:
s = s + i
print("get %d" % s)