寻求可修改元素并返回新列表的单行Python表达式
解决单行修改列表元素并返回新列表的问题
方案1:切片+解包(简洁直观)
如果仅替换单个索引的元素,用列表切片加解包的方式最简洁,无需枚举:
# key=0; value=3; rng=[1,2] [*rng[:key], value, *rng[key+1:]]
该写法会将原列表rng中key位置之前的元素、新值、key位置之后的元素重新拼接为新列表,完全匹配需求,代码比列表推导式更精简。
方案2:赋值表达式+语句分隔(与原函数逻辑完全等价)
要是想和你提供的replace函数逻辑完全一致(先复制原列表,再修改指定索引),可以借助Python赋值表达式(:=)加语句分隔符;把逻辑压缩成单行:
# 等价于你的replace函数 (a := list(rng))[key] = value; a
这个写法先把原列表复制给变量a,修改a的指定索引后返回a,和原函数的执行步骤完全一致,可直接作为表达式使用。
针对PyTorch场景的优化
你给出的实际代码里用到了__setitem__的技巧,同样可以用赋值表达式逻辑简化:
kv_cache_write = (shape := list(kv_cache.shape))[-2] = x.shape[-1]; torch.zeros(shape)
该写法逻辑清晰,和列表修改的思路统一,比原代码可读性更强。
内容的提问来源于stack exchange,提问作者Tom Huntington
相关产品推荐
相关产品推荐

