前天开始学习Python,从今天开始每天更新。
最初的版本肯定是很详细,甚至有一些没必要的东西,我都记录了下来,以后有时间,会进行删减修改,毕竟是新手,连编程怎么学习都不是很清楚,慢慢摸索着来吧。感谢大神们的教程和书籍。
【切片】是一个很好用的工具,就是把一个list或者一个tuple中的内容切开,从前往后切从后往前切或者从中间切都可以。
EX:
>>>L=list(range(5))
>>>L[:5]
[0,1,2,3,4]
>>>L[:5:2]
[2,4]
>>>L[:-1]
[0,1,2,3,4]
【迭代】
>>> d={‘a‘:1,‘b‘:2,‘c‘:3}
>>> for key in d:
print(key)
b
a
c
>>> for value in d.values():
print(value)
2
1
3
>>> for k,v in d.items():
print(k,v)
b 2
a 1
c 3
>>> for ch in ‘ABC‘:
print(ch)
A
B
C
>>> from collections import Iterable
>>> isinstance(‘abc‘,Iterable)
True
>>> isinstance([1,2,3],Iterable)
True
>>> isinstance(123,Iterable)
False
>>>
>>> #为判断一个对象是否可以迭代
>>>
>>> for i,value in enumerate([‘A‘,‘B‘,‘C‘]):
print(i,value)
0 A
1 B
2 C
>>> #对list实现类似Java那样的下标循环,用enumrate函数
>>>
>>> for x,y
SyntaxError: invalid syntax
>>> for x,y in[(1,1),(2,4),(3,9)]:
print(x,y)
1 1
2 4
3 9
>>> #同时引入两个变量
>>>
>>> #小结:任何迭代对象都可以用作FOR循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用FOR循环
>>>
>>>
【列表生成式】
>>>
>>> list(range(1,11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> #简单的生成list[1,2,3,4,5,6,7,8,9,10]
>>> L=[]
>>> for x in range(1,11):
L.append(x*x)
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> #生成[1*1,2*2,...,10*10]
>>> [x*x for x in range(1,11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> #用列表生成式代替上面的语句
>>> [x*x for x in range(1,11) if x%2 ==0]
[4, 16, 36, 64, 100]
>>> #筛选出仅偶数的平方
>>> 1+1
2
>>> [m+n for m in ‘ABC‘ for n in ‘XYZ‘]
[‘AX‘, ‘AY‘, ‘AZ‘, ‘BX‘, ‘BY‘, ‘BZ‘, ‘CX‘, ‘CY‘, ‘CZ‘]
>>> #使用两层循环生成全排列
>>> import os #导入OS模块,模块的概念后面讲
>>> [d for d in os.listdir(‘.‘)]
[‘DLLs‘, ‘Doc‘, ‘include‘, ‘Lib‘, ‘libs‘, ‘LICENSE.txt‘, ‘NEWS.txt‘, ‘python.exe‘, ‘pythonw.exe‘, ‘README.txt‘, ‘Scripts‘, ‘tcl‘, ‘Tools‘]
>>> #列出当前目录下所有的文件和目录名
>>> d={‘x‘:‘A‘,‘y‘:‘B‘,‘z‘:‘C‘}
>>> for k,v in d,items():
print(k,‘=‘,v)
Traceback (most recent call last):
File "<pyshell#75>", line 1, in <module>
>>> for k,v in d.items():
print(k,‘=‘,v)
z = C
y = B
x = A
>>> #dict 的items()可以同时迭代key和value
>>> d={‘x‘:‘A‘,‘y‘:‘B‘,‘z‘:‘C‘}
>>> [k + ‘=‘ + v for k,v in d.items()]
[‘z=C‘, ‘y=B‘, ‘x=A‘]
>>> L=[‘Hello‘,‘World‘,‘IBM‘,‘Apple‘]
>>> [s.lower() for s in L]
[‘hello‘, ‘world‘, ‘ibm‘, ‘apple‘]
>>> #把list中所有的字符串变成小写
>>> L1=[‘Hello‘,‘World‘,18,‘Apple‘,None]
>>> L2=[x.lower() for x in L1 if isinstance(x,str)]
>>> print(L2)
[‘hello‘, ‘world‘, ‘apple‘]
>>> #用列表生成式快速生成一个只含有小写字母的list,非常的简洁方便
>>>
【生成器】
利用生成器计算斐波那契数列
【迭代器】
>>> from collections import Iterator
>>> isinstance((x for x in range(10)),Iterator)
True
>>> isinstance([],Iterator)
False
>>> isinstance({},Iterator)
False
>>> isinstance(‘abc‘,Iterator)
False
>>> #可以被next()函数调用并不断返回下一个值的对象成为迭代器;Iterator
>>>
>>> isinstance(iter([]),Iterator)
True
>>> isinstance(iter(‘abc‘),Iterator)
True
>>> #吧list,dict,str等Iterable变成Iterator可以使用iter()函数
>>>
{函数式编程}
【高阶函数】
>>> f=abs
>>> f(-10)
10
>>> f
<built-in function abs>
>>> #变量可以指向函数
>>> def add(x,y,f);
SyntaxError: invalid character in identifier
>>> def add(x,y,f):
return f(x) + f(y)
>>> add(-5,6,abs)
11
>>> #传入函数,最简单的高阶函数
【map/reduce】
>>> list(map(str,[1,2,3,4,5,6,7,8,9]))
[‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘]
>>> #map的用法
>>> from functools import reduce
>>> def add(x,y):
return x+y
>>> reduce(add,[1,3,5,7,9])
25
>>> #用reduce实现对一个序列求和
>>> from functools import reduce
>>> def fn(x,y):
return x*10+y
>>> reduce(fn,[1,3,5,7,9])
13579
>>> #把序列[1,3,5,7,9]变成整数13579
>>> from functools import reduce
>>> def fn(x,y):
return x*10+y
>>> def char2num(s):
return {‘0‘:0,‘1‘:1,‘2‘:2,‘3‘:3,‘4‘:4,‘5‘:5,‘6‘:6,‘7‘:7,‘8‘:8,‘9‘:9}[s]
>>> reduce(fn,map(char2num,‘13579‘))
13579
>>> #将str转换为int的函数
>>> !!!练习题有些难,没有做
【filter】
【sorted】