python中如何对列表list做相同的处理

问题描述

在写python代码过程中我们常常可能会遇到这样一种情况,要对一个list中的每个元素做同样的操作。比如我们读到一组数据,需要做比例尺缩放,或者做单位换算,这就需要对list的每一个元素操作。例如现在我们有一组数据,坐标数值单位是米,而我们需要的是厘米,这就需要厘米的每个元素乘以100。数据情况如下:
buliding=[[0,0],[0,10],[3,10],[3,3],[6,3],[6,11],[8,11],[8,0]]

解决方法

方法有很多,我们今天来说三个。

循环遍历每个元素

循环,对每一个元素做处理,注意不可以进行删除操作。代码如下:

buliding=[[0,0],[0,10],[3,10],[3,3],[6,3],[6,11],[8,11],[8,0]]
print('buliding:',buliding)
for i in range(len(buliding)):
    buliding[i]=[buliding[i][0]*100,buliding[i][1]*100]
print('after prcoessing, buliding:', buliding)
print(buliding)

运行结果如下:

buliding: [[0, 0], [0, 10], [3, 10], [3, 3], [6, 3], [6, 11], [8, 11], [8, 0]]
after prcoessing, buliding: [[0, 0], [0, 1000], [300, 1000], [300, 300], [600, 300], [600, 1100], [800, 1100], [800, 0]]

可以看到,结果正确。但是这种方法效率比较低。

使用map函数

使用map函数对每个元素处理,但是map函数返回的是一个map类型,所以要想查看值需要把它再转换为list。代码如下

print('buliding:',buliding)
def process_bld(x):
    return [x[0]*100,x[1]*100]
bld_map=map(process_bld,buliding)
bld=list(bld_map)
print('after prcoessing, buliding:', bld)

运行发现,结果也正确。

使用numpy处理

numpy对列表或者矩阵处理非常方便,把列表转换成numpy再处理是一个明智的做法。list 转 numpy 用的是
np.array(a),而ndarray 转 list用的是a.tolist()。代码如下

import numpy as np
buliding=[[0,0],[0,10],[3,10],[3,3],[6,3],[6,11],[8,11],[8,0]]
print('buliding:',buliding)
np_bld=np.array(buliding)
np_bld_process=np_bld*100
bld=np_bld_process.tolist()
print('after prcoessing, buliding:', bld)

可以看到,用numpy非常的方便。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值