# Python能够优雅地处理那些没有意义的切片索引:一个过大的索引值将被列表的实际长度所代替,当上边界比下边界大时(即切片左值大于右值)就返回空列表>>> a[2:42][3,'In','Out']>>> a[32:][]# 切片操作还可以设置步长(即从切片索引i到索引j,每个n个元素取值)>>> a[1::2][2,'In']# 列表也支持连接操作,返回一个新的列表>>> a +[5,6,7][1,2,3,'In','Out',5,6,7]# 允许修改元素>>> a[2]='fuck'>>> a
[1,2,'fuck','In','Out']# 也可以对切片赋值,此操作可以改变列表的长度>>> a
[1,2,'fuck','In','Out']# 替换某些值>>> a[1:3]=['you','me']>>> a
[1,'you','me','In','Out']# 移除某些值>>> a[1:3]=[]>>> a
[1,'In','Out']# 清空列表>>> a[:]=[]>>> a
[]
要检查某个值是否存在于列表中:‘me’ in a(返回false)
获得列表的长度:len(a)
# 检查列表是否为空if list_name:# 列表不为空passelse:#列表为空pass# 列表是允许嵌套的>>> a =['a','b','c']>>> b =[1,2,3]>>> x =[a, n]>>> x
[['a','b','c'],[1,2,3]]>>> x[0]['a','b','c']>>> x[0][1]'b'
for循环
a =[1,2,3]for var in a:print(var)
range()函数
如果你需要一个数值序列,内置函数range()会很方便的生成一个等差数列(并不是列表)
continue语句
如同break,我们可以在循环中使用continue,他会跳过其后的代码回到循环开始处执行
这意味着它可以帮助你跳过部分循环
循环后的else语句
我们可以在循环后面使用可选的else语句,他将会在循环完毕后执行,除非有break语句终止了循环
for i inrange(0,5):print(i)else:print("Good Bye!")
数据结构
列表
# 创建一个列表a>>> a =[23,45,1,-3434,43624356,234]# 1、a.append(var),将var元素插入到列表末尾>>> a.append(45)>>> a
[23,45,1,-3434,43624356,234,45]# 2、a.insert(index, var),将var元素插入到指定索引位置>>> a.insert(0,111)>>> a
[111,23,45,1,-3434,43624356,234]# 3、a.count(var),返回列表中var元素出现的个数>>> a.count(45)2# 4、a.remove(var),将var元素从列表中移除>>> a.remove(111)[23,45,1,-3434,43624356,234,45]# 5、a.extend(b),将列表b中的元素添加到a列表中>>> b =[11,22]>>> a.extend(b)>>> a
[23,45,1,-3434,43624356,234,45,11,22]# 6、a.sort(),对列表进行排序(前提是列表是可比较的)>>> a.sort()>>> a
[-3434,1,11,22,23,45,45,234,43624356]# 7、使用del关键字删除指定位置的列表元素>>>del a[-1]>>> a
[-3434,1,11,22,23,45,45,234]# 8、a.pop(i),i不存在时,默认弹出最后面元素,否则弹出指定位置的元素>>> a.pop()>>> a
[-3434,1,11,22,23,45,45]>>> a.pop(0)>>> a
[1,11,22,23,45,45]
>>>[(x, y)for x in[1,2,3]for y in[3,1,4]if x != y][(1,3),(1,4),(2,3),(2,1),(2,4),(3,1),(3,4)]# 等同于>>> combs =[]>>>for x in[1,2,3]:...for y in[3,1,4]:...if x != y:... combs.append((x,y))>>> combs
[(1,3),(1,4),(2,3),(2,1),(2,4),(3,1),(3,4)]
# 列表推导式也可以嵌套>>> a =[1,2,3]>>> z =[x+1for x in[x**2for x in a]]>>> z
[2,5,10]
元组
# 元组是由数个逗号分隔的值组成>>> a ='a','b','c'>>> a
('a','b','c')>>> a[1]'b'# 可以对任何一个元组执行拆封操作并赋值给多个变量# divmod()函数返回包含商和余数的元组>>>divmod(15,2)(7,1)# 元组是不可变类型,这意味着你不能在元组内删除或添加或编辑任何值# 要创建只含有一个元素的元组,在值后面跟一个逗号# 通过内建函数type()可以知道任意变量的数据类型>>> a =(123)>>> a
123>>>type(a)<class'int'>>>> b =(123,)>>> b
(123,)>>>type(b)<class'tuple'>
>>> basket ={'a','b','c','d','c'}# 可以看到输出的顺序不一样,重复元素也被去除>>>print(basket){'b','c','a','d'}>>>'b'in basket
True>>>'e'in basket
False# 两个单词中的字母进行集合操作>>> a =set('abracadabra')>>> b =set('alacazam')# a去重后的字母>>> a
{'a','r','b','c','d'}# a有而b没有的字母:差集:a.different(b)>>> a - b
{'r','d','b'}# 存在于a或b的字母:并集:a.union(b)>>> a | b
{'a','c','r','d','b','l','m','z'}# a和b都有的字母:交集:a.intersection(b)>>> a & b
{'a','c'}# 存在于a或b,但不同是存在的字母:对称差集:a.symmetric_different(b)>>> a ^ b
{'r','d','b','m','z','l'}# 子集 or 父集>>> a.issubset(b)# 子集判断False>>> a.issuperset(b)# 父集判断False# 判断是否有交集:无交集返回True;反之返回False>>> a.isdisjoint(b)True
基本操作
>>> a =set([11,22,33])>>> a
{22,11,33}# add操作:单独添加一个集合元素的操作>>> a.add(44)>>> a
{11,33,44,22}# update操作:添加多个集合元素>>> a.update([55,66])>>> a
{33,66,11,44,22,55}# remove操作:删除其中的一项:在删除不存在的元素时会报错>>> a.remove(66)>>> a
{33,11,44,22,55}# len操作:确定元素个数>>>len(a)5# in操作:成员判断操作>>>11in a
True>>>11notin a
False# pop操作:删除任意的一个,并返回删除的元素>>> a.pop()33>>> a
{11,44,22,55}# discard操作:和remove不同的一点在于:discard在指定删除不存在的元素时不会报错>>> a.discard(33)>>> a
{11,44,22,55}>>> a.discard(11){22,55,44}
字典
字典是无序的键值对集合,同一个字典内的键必须是互不相同的。一对大括号{}创建一个空字典
初始化字典时,在大括号内放置一组逗号分隔的键:值对,这也是字典的输出方式
我们可以使用键来检索存储在字典中的数据
>>> data ={'a':'aaa','b':'bbb','c':'ccc'}>>> data
{'a':'aaa','b':'bbb','c':'ccc'}>>> data['a']'aaa'# 创建新的键值对>>> data['d']='ddd'>>> data
{'a':'aaa','b':'bbb','c':'ccc','d':'ddd'}# 使用 del 关键字删除任意指定的键值对>>>del data['a']>>> data
{'b':'bbb','c':'ccc','d':'ddd'}# 使用 in 关键字查询指定的键是否存在于字典中>>>'b'in data
True# 必须知道的是:字典中的键必须是不可变类型,比如你不能使用列表作为键# dict()可以从包含键值对的元组中创建字典>>>dict((('a','b'),('c','d'))){'a':'b','c':'d'}# 使用items()方法可以遍历字典>>> data
{'b':'bbb','c':'ccc','d':'ddd'}>>>for x, y in data.items():...print("{} uses {}".format(x, y))
b uses bbb
c uses ccc
d uses ddd
# 很多时候我们需要王字典中的元素添加数据,我们首先要判断这个元素是否存在,不存在则创建一个默认值# 如果在循环里执行这个操作,每次迭代都需要判断一次,降低程序性能# 我们可以使用dict.setdefault(key, default)有效率的完成这个事情>>> data ={}>>> data.setdefault('names',[]).append('Ruby')>>> data
{'names':['Ruby']}>>> data.setdefault('names',[]).append('Python')>>> data
{'names':['Ruby','Python']}>>> data.setdefault('names',[]).append('Java')>>> data
{'names':['Ruby','Python','Java']}# 试图索引一个不存在的键时将会抛出一个KeyError的错误# 我们可以使用dict.get(ley, default)来索引键。如果键不存在,那么返回指定的default值>>> data['floo']
Traceback (most recent call last):
File "<stdin>", line 1,in<module>
KeyError:'floo'>>> data.get('floo',0)0# 如果你像遍历列表(或任何序列类型)的同时获得元素索引值,你可以使用 enumrate()>>>for i, j in enumrate(['a','b','c']):...print(i, j)...0 a
1 b
2 c
# 当你需要同时遍历多个序列类型,你可以使用 zip() 函数>>> a =['a','b']>>> b =['c','d']>>>for x, y inzip(a, b):...print("{} uses {}".format(x, y))...
a uses c
b uses d
文件操作
基本操作
count =0# 读取操作:"r"
f =open("yesterday","r", encoding='UTF-8')for line in f:# 去掉空格和换行print(line.strip())
count +=1# 写入操作:"w"文件存在则覆盖;文件不存在则创建新文件
f =open("yesterday","w", encoding='UTF-8')
f.write("hehehe")
f.close()# 追加操作:"a"不能执行读操作
f =open("yesterday","a", encoding='utf-8')
f.write("\n呵呵呵")
f.close()
deftest1():print("in the test1")#结束程序,并返回值,不再执行此函数体内的下面部分代码return0print('test end')deftest2():print("in the test2")deftest3():print("in the test3")#返回值的类型比较多,最终将返回到一个元组中return1,'hello',['hehe','gaga'],{'name':'king'}