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
相关产品推荐
相关产品推荐

