python基础

本文介绍了Python的基础知识,包括列表推导式、条件赋值、匿名函数与map方法、zip对象与enumerate方法。接着深入讲解了Numpy库,涵盖np数组的构造、变形与合并、切片与索引以及常用函数。还详细阐述了广播机制和向量与矩阵的计算,包括内积、范数和乘法,并给出了相关练习。
摘要由CSDN通过智能技术生成

1预备基础

Python 基础

列表推导式与条件赋值

在生成一个数字序列的时候,在Python 中可以如下写出:

L = []
def my_fuc(x):
    return x*2
for i in range(5):
    L.append(my_fuc(i))
L
[0, 2, 4, 6, 8]

事实上可以利用列表推导式进行写法上的简化:[* for i in ] 。其中,第一个 为映射函数,其输入为后面i
指代的内容,第二个* 表示迭代的对象。

[my_fuc(i) for i in range(5)]
[0, 2, 4, 6, 8]

列表表达式还支持多层嵌套,如下面的例子中第一个for 为外层循环,第二个为内层循环:

[m+'_'+n for m in ['a', 'b'] for n in ['c', 'd']]
['a_c', 'a_d', 'b_c', 'b_d']

除了列表推导式,另一个实用的语法糖是条件赋值,其形式为value = a if condition else b :

value = 'cat' if 2>1 else 'dog'
value
'cat'

等价于如下的写法:

a, b = 'cat', 'dog'
condition = 2>1
if condition:
    value = a
else:
    value = b

下面举一个例子,截断列表中超过5 的元素:

L = [1, 2, 3, 4, 5, 6, 7]
[i if i<5 else 5 for i in L]
[1, 2, 3, 4, 5, 5, 5]

匿名函数与map 方法

有一些函数的定义具有清晰简单的映射关系,例如上面的my_func 函数,这时候可以用匿名函数的方法简
洁地表示:

my_fuc = lambda x: 2*x
my_fuc(3)
6
multi_para_func = lambda a,b : b+ a
multi_para_func(3, 4)
7

但上面的用法其实违背了“匿名”的含义,事实上它往往在无需多处调用的场合进行使用,例如上面列表推
导式中的例子,用户不关心函数的名字,只关心这种映射的关系:

[(lambda x: 2*x)(i) for i in range(5)]
[0, 2, 4, 6, 8]

对于上述的这种列表推导式的匿名函数映射,Python 中提供了map 函数来完成,它返回的是一个map 对象,需要通过list 转为列表:

list(map(lambda x: x*2, range(5)))
[0, 2, 4, 6, 8]

对于多个输入值的函数映射,可以通过追加迭代对象实现:

list(map(lambda a, b: str(a)+'_'+str(b), range(5), list('abcde')))
['0_a', '1_b', '2_c', '3_d', '4_e']

zip对象与enumerate 方法

zip 函数能够把多个可迭代对象打包成一个元组构成的可迭代对象,它返回了一个zip 对象,通过tuple, list
可以得到相应的打包结果:

L1, L2, L3 = list('abc'), list('def'), list('hij')
list(zip(L1, L2, L3))
[('a', 'd', 'h'), ('b', 'e', 'i'), ('c', 'f', 'j')]
tuple(zip(L1, L2, L3))
(('a', 'd', 'h'), ('b', 'e', 'i'), ('c', 'f', 'j'))

往往会在循环迭代的时候使用到zip 函数:

for i, j, k in zip(L1, L2, L3):
    print(i, j, k)
a d h
b e i
c f j

enumerate 是一种特殊的打包,它可以在迭代时绑定迭代元素的遍历序号:

L = list('abcd')
for index, value in enumerate(L):
    print(index, value)
0 a
1 b
2 c
3 d

用zip 对象也能够简单地实现这个功能:

L = list('abcd')
for index, value in zip(range(5), L):
    print(index, value)
0 a
1 b
2 c
3 d

当需要对两个列表建立字典映射时,可以利用zip 对象:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值