如何将获取有序唯一参数的循环代码改写为最简列表推导式?
按出现顺序提取唯一参数名的简洁实现
需求
从每行格式为parameter = something的字符串列表中,按首次出现顺序提取唯一的参数名(等号左侧的内容)。
原有可行循环代码
data = [ 'B = 3', 'T = 0', 'N = 5', 'V = 2', 'N = 1', 'V = 4', 'B = 7', 'T = 2', ] h = [] for d in data: el = d.split("=", 1)[0].strip() if el not in h: h.append(el) # 输出结果:['B', 'T', 'N', 'V']
优化方案
方案1:用海象运算符简化列表推导式(Python 3.8+)
你之前的写法重复了分割和strip操作,用Python 3.8引入的海象运算符:=可以在推导式里先计算并赋值el,避免重复代码:
h = [] [h.append(el) for d in data if (el := d.split("=", 1)[0].strip()) not in h] # 输出结果:['B', 'T', 'N', 'V']
方案2:一行式高效实现(Python 3.7+)
利用Python 3.7及以上版本字典默认保留插入顺序的特性,用dict.fromkeys()直接生成去重后的有序列表,效率比列表判断更高(字典的成员查找是O(1),列表是O(n)):
h = list(dict.fromkeys(d.split("=", 1)[0].strip() for d in data)) # 输出结果:['B', 'T', 'N', 'V']
内容的提问来源于stack exchange,提问作者Rasec Malkic
相关产品推荐
相关产品推荐

