鱼C论坛

 找回密码
 立即注册
查看: 3356|回复: 15

怎么给列表里的每一个数值去除单位

[复制链接]
发表于 2022-10-31 12:31:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
例如 i =['26kg','27kg','28']怎么去除kg单位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-31 12:40:52 From FishC Mobile | 显示全部楼层
循环遍历,替换
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-31 12:42:05 | 显示全部楼层
本帖最后由 tommyyu 于 2022-10-31 12:45 编辑

代码:
def out_unit(x, unit = ['kg']):
    if type(unit) == type(''):
        unit = [unit]
    unit.sort(key = len, reverse = True)
    for i in range(len(x)):
        for j in unit:
            if x[i].endswith(j):
                x[i] = x[i][:len(x[i])-len(j)]
                break
    return x

print( out_unit(['26kg', '27kg', '28']) ) # 默认去除 kg 单位
print( out_unit(['26km', '27km', '28'], unit = 'km') ) # 去除指定单位
print( out_unit(['26km', '27kg', '28'], unit = ['km', 'kg']) ) # 去除多个指定单位
运行效果:
['26', '27', '28']
['26', '27', '28']
['26', '27', '28']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-31 12:58:29 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-31 12:59 编辑
i = ['26kg','27kg','28']
for k in range(len(i)):
    if len(i[k]) > 2 and i[k][-2 :] == 'kg' : i[k] = i[k][: -2]
print(i) 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-31 13:04:21 | 显示全部楼层
i = ['26kg','27kg','28']
for k in range(len(i)):
    i[k] = i[k].strip('kg')  # 用strip方法去掉两端的单位
print(i) 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-31 13:46:19 | 显示全部楼层
本帖最后由 阿奇_o 于 2022-10-31 13:56 编辑

我在想,能不能不遍历实现呢?。。实际上不行,但表面上的确可以,比如
>>>ls = ['26kg','27kg','28']
>>>','.join(ls).replace('kg', '').split(',')    # 表面上的确看不见for循环,哈哈
['26', '27', '28']
ps: 实际应用中,可别用这样的 真·骚操作 啊。。为什么说它"真骚"? 因为它要遍历3次!(join遍历一次,replace遍历一次,split又遍历一次)
而它本来可以遍历一两次的(如 [ i.replace('kg', '') for i in ls ])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-31 14:18:45 | 显示全部楼层

请问’kg‘后面的:是啥意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-31 14:20:50 | 显示全部楼层
至尊python法师 发表于 2022-10-31 14:18
请问’kg‘后面的:是啥意思

看懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-31 15:01:13 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2022-10-31 15:39 编辑
至尊python法师 发表于 2022-10-31 14:18
请问’kg‘后面的:是啥意思


        就是每一个 if、for、while 等后面都有的那个冒号。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-31 18:57:42 | 显示全部楼层
本帖最后由 cflying 于 2022-10-31 18:59 编辑

这个么,用replace是一个意思,先转成str,再替换,然后再转列表,省去遍历
import re
i =['26kg','27kg','28']
a=re.sub('[a-zA-Z]','',str(i))
print(eval(a))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-1 22:55:31 | 显示全部楼层
阿奇_o 发表于 2022-10-31 13:46
我在想,能不能不遍历实现呢?。。实际上不行,但表面上的确可以,比如

ps: 实际应用中,可 ...

不遍历也可以实现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-1 23:27:26 | 显示全部楼层
cflying 发表于 2022-11-1 22:55
不遍历也可以实现

你还是稍微仔细点理解一下我的中文意思,好吧,什么叫"实际上",什么叫"表面上"?

不遍历也可以实现?? 计算机不逐个对比、不逐个检查字符是不是'kg'或正则的[a-zA-z],怎么可能进行判断,不能判断,怎么进行处理(不管是用替换还是切片等手段)。。

ps: 倒是未来的量子计算机,或许可以不遍历,因为它可以借助"量子效应" 直接 "匹配到答案"。。这很量子~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-2 10:38:23 | 显示全部楼层
本帖最后由 cflying 于 2022-11-2 10:47 编辑
阿奇_o 发表于 2022-11-1 23:27
你还是稍微仔细点理解一下我的中文意思,好吧,什么叫"实际上",什么叫"表面上"?

不遍历也可以实现? ...


好家伙,只是一个脚本工具,就是不遍历列表方便而已,没必要扯底层概念,还好没整到汇编。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-2 14:05:08 | 显示全部楼层
cflying 发表于 2022-11-2 10:38
好家伙,只是一个脚本工具,就是不遍历列表方便而已,没必要扯底层概念,还好没整到汇编。。 ...

是呀,本来小事一桩,我本来的回答也是想卖弄一下join和split连用的骚操作。。
可你 为啥@我引用我的回答,然后就说了句"不遍历也可以实现"? 这不就像是 有人到你家门口喊话、挑战你,你不得出去和他battle掰头一下?(况且还是我占理~)   
其实你不@我,我早就把这题忘了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-2 19:28:46 | 显示全部楼层
本帖最后由 cflying 于 2022-11-2 19:36 编辑
阿奇_o 发表于 2022-11-2 14:05
是呀,本来小事一桩,我本来的回答也是想卖弄一下join和split连用的骚操作。。
可你 为啥@我引用我的回 ...


厉害,厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-2 22:26:14 | 显示全部楼层
i = [each[:-2] if "kg" in each else each for each in i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 19:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表