SZTU-ACM第二周

        这周继续学习了Python的一些知识,下面是我的一些笔记:

1.切片:

        取list或tuple的部分元素(字符串也可以):

L=list(range(100))#建立一个0~99的list
print(L[0:2])#取0,1,正好两个元素,但不包括2
print(L[:10])#前十个元素,即0~9,不包括L[10]=10,它是第11位元素
print(L[-10:])#后十个元素,包括L[-10],因为是从-1开始索引的,且[ :]的前部是包括的
#后部不包括,即输出90~99
print(L[10:20])#从10~19
print(L[::5])#所有数,每5个取一次

2.迭代:

        (1)dict:

                只迭代key:for key in d:

                只迭代value:for value in d.values():

                同时迭代key,value:for k,v in d.items():

           (2)迭代字符串:

for ch in 'ABC':
    print(ch)
#输出A,B,C

         (3)迭代list的索引和元素本身:

for i,value in enumerate(['A','B','C']):
    print(i,value)
#enumberate是内置函数
#输出:
#0 A
#1 B
#2 C

        (4)for 中同时引用两个变量:

for x,y in [(1,1),(3,4),(3,8)]:
    print (x,y)
#输出(1,1) (3,4),(3,8)

3.列表生成式:

        (1)生成列表

L=list(range(1,11))
print(L)
#输出[1,2,3,4,5,6,7,8,9,10]
L=[]
for x in range(1,11):
    L.append(x*x)
print(L)
#输出[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

        (2)列表生成式:

注意:for 的前部是表达式,有if必须有else;后部只有if 不能有else

L=[x*x for x in range(1,11) if x%2==0]
print(L)
#筛选出偶数的平方
#输出[4,16,36,64,100]
#两层循环形成全排列
L=[m+n for m in 'ABC' for n in 'XYZ']
print(L)
#输出['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
#if else
L=[x if x%2==0 else -x for x in range(1,11) ]
print(L)
#输出:[-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
#两个变量生成list
d={'X':'A','Y':'B','Z':'C'}
L=[k+ '='+ v for k, v in d.items()]
print(L)
#输出:['X=A', 'Y=B', 'Z=C']

4.生成器generator:

        如果列表元素可以按照某种算法推算出来,那我们就可以在循环的过程中不断推算出后续的元素,这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

g=(x*x for x in range(10))
for n in g:
    print(n)
#输出:0
#1
#4
#9
#16
#25
#36
#49
#64
#81

5.高阶函数:

        (1)介绍:

        函数本身可以赋值给变量,可通过该变量来调用这个函数。函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。    

def add(x,y,f):#传入函数
    return f(x)+f(y)
print(add(-5,6,abs))
#输出11

        (2)map()

                        map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

                        map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的函数,还可以计算任意复杂的函数。

def f(x):
    return x*x
r=map(f,[1,2,3,4,5,6,7,8,9])
print(list(r))
#输出 [1, 4, 9, 16, 25, 36, 49, 64, 81]
#通过list()函数让它把整个序列都计算出来并返回一个list
#当然也可以用一个循环实现

        (3)reduce()

                        reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。效果如下:                       

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
#对一个序列求和
from functools import reduce
def add(x,y):
    return x+y
print(reduce(add,[1,3,5,7,9])) 
#输出25

 

#把序列[1, 3, 5, 7, 9]变换成整数13579
from functools import reduce
def add(x,y):
    return x*10+y
print(reduce(add,[1,3,5,7,9]))
#输出13579

                 (4)综合运用map和reduce

#因为字符串也是序列,所以可以写出一个新函数str2int,实现str和int的转换
from functools import reduce 
DIGITS={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
def str2int(s):
    def add(x,y):
        return x*10+y
    def c2num(s):
        return DIGITS[s]
    return reduce(add,map(c2num,s))
print(str2int(['1','3','5','7','9']))
#输出 13579

          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值