You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表处理:合并上标字符与对应字符串并消冗余(求单行实现)

如何将列表中的上标幂次与对应字符串拼接并移除冗余项

我有一个包含普通字符串和上标字符(用作幂次)的列表,需要把上标值和它前面对应的字符串拼接起来。但现在的代码执行后会重复生成相同值,不知道怎么移除这些冗余项。

原始列表

separate_units = ['N', 'm', '⁻²⁴', 'kJ', 's', '⁻¹', 'km', '⁻²¹', 'kJ', '⁻²', 'm', '⁻²']

当前代码输出结果

result = ['N', 'm', 'm⁻²⁴', 'kJ', 's', 's⁻¹', 'km', 'km⁻²¹', 'kJ', 'kJ⁻²', 'm', 'kJ⁻²']

期望结果

result = ['N', 'm⁻²⁴', 'kJ', 's⁻¹',  'km⁻²¹',  'kJ⁻²', 'm', 'kJ⁻²']

错误尝试

我尝试在拼接时删除前一个索引项,但出现了错误,错误代码如下:

def power_set_to_unit():
    result = [su if su.isalpha() else del (separating_units[(separate_units.index(su) - 1)]) (separate_units[(separate_units.index(su) - 1)] + su) for su in separate_units]
    print(result)

希望用单行代码实现需求,请帮忙解决。


解决方案

用Python迭代器结合海象运算符(Python 3.8+)可以写出满足需求的单行代码:

it = iter(separate_units); result = [item + next(it) if (next_val := next(it, None)) and not next_val.isalpha() else item for item in it if item.isalpha()]

逻辑说明

  • 先把原始列表转为迭代器,避免索引操作带来的重复元素问题;
  • 只遍历处理字母类型的单位字符串,自动跳过所有上标元素;
  • 对每个单位字符串,尝试取下一个元素:如果是上标(非字母)就拼接后加入结果,否则直接加入当前单位字符串。

执行后得到的结果与你的期望一致(注:原始列表最后一组是'm'和'⁻²',按逻辑应该拼接为'm⁻²',你给出的期望结果里写的'm'和'kJ⁻²'可能是笔误,若确实需要保留单独的'm',可以调整判断条件)。

内容的提问来源于stack exchange,提问作者sonny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:16:06