Pandas学习(1)——Python基础

Python 基础

本文基于Datawhale提供的Pandas学习资料。

均为本人理解,如有不足或错误地方欢迎补充批评指正,如有侵权,联系速删。

1.列表推导式与条件赋值

表达式推导是Python的⼀种独有特性。推导式是可以从⼀个数据序列构建另⼀个新的数据序列的结构体。
例如如下的代码:

L =[]
def my_func(x):
    return 2*x
for i in range(5):
    L.append(my_func(i))
print(L)

这样写会比较长,可以用以下写法进行简化:
[a for i in a ]
其中,第一个 a 为映射函数,其输入为后面 i 指代的内容,第二个 a 表示迭代的对象。

def my_func(x):
    return 2*x
print([my_func(i) for i in range(5)])

列表的表达式还可以进行多层嵌套。

#例如如下表达式
[m+'_'+n for m in ['a', 'b'] for n in ['c', 'd']]

结果是这样的:
[‘a_c’, ‘a_d’, ‘b_c’, ‘b_d’]
等价于这样写:

for m in ['a','b']:
    for n in ['c','d']:
        print(m + '_' + n)

另一个实用的语法是带有 if 选择的条件赋值。其形式为 value = a if condition else b
例如可以这样写:

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

这行代码相当于以下几行:

a, b = 'cat', 'dog'
condition = 2 > 1 # 此时为True
if condition:
    value = a
else:
    value = b

value的值就是 cat

2. 匿名函数与map方法

匿名函数

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

my_func = lambda x: 2*x

它往往在无需多处调用的场合进行使用,例如:

[(lambda x: 2*x)(i) for i in range(5)]
map

对于上述的这种列表推导式的匿名函数映射, Python 中提供了 map 函数来完成。
函数格式为:

map(function,iterable,...)

第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。
当不传入function时,map()就等同于zip(),将多个列表相同位置的元素归并到一个元组。
它返回的是一个 map 对象,需要通过 list 转为列表。

list(map(lambda x: 2*x, range(5)))

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

list(map(lambda x, y: str(x)+'_'+y, range(5), list('abcde')))

3. 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’)]
一般会在循环迭代的时候使用到 zip 函数。

enumerate 可以在迭代时绑定迭代元素的遍历序号:

L = list('abcd')
for i, j in enumerate(L):
    print(i, j)

输出为:
0 a
1 b
2 c
3 d

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

for i, j in zip(range(len(L)), L):
    print(i, j)

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

L1, L2 = list('abc'), list('def')
dict(zip(L1, L2))

结果返回一个字典:
{‘a’: ‘d’, ‘b’: ‘e’, ‘c’: ‘f’}

Python也提供了解压方法:

L1, L2, L3 = list('abc'), list('def'), list('hij')
zipped = list(zip(L1, L2, L3))
list(zip(*zipped))

结果的三个元组分别对应原来的列表:
[(‘a’, ‘b’, ‘c’), (‘d’, ‘e’, ‘f’), (‘h’, ‘i’, ‘j’)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值