簡體   English   中英

返回變異列表的表達式

[英]Expression that returns mutated list

我正在尋找一個表達式,改變一個元素並返回修改后的列表

下面有點啰嗦

# key=0; value=3; rng=[1,2]
[(v if i != key else value) for i, v in enumerate(rng)]

編輯

我正在尋找一種在單個表達式中內聯以下 function 的方法

def replace(rng: List, key: int, value):
    a = list(rng) 
    a[key] = value
    return a

編輯 2 :真正激發這個問題的代碼

class TextDecoder(nn.Module):
    def forward(self, x: Tensor, kv_cache: Tensor):
        kv_cache_write = torch.zeros((_:=list(kv_cache.shape))).__setitem__(-2, x.shape[-1]) or _)
        ...

也許比列表串聯更好:

[*rng[:key], value, *rng[key+1:]]

其他:

[a for a, a[key] in [(rng[:], value)]][0]

或者,如果您只是將結果分配給一個變量(如前所述),您可以這樣做:

a, a[key] = rng[:], value

嘗試列表串聯:

key = 0
value = 3
rng = [1, 2]

out = rng[:key] + [value] + rng[key+1:]
print(out)

rng[:key]是列表的副本,直到鍵(不包括), [value]是一個新列表,其中唯一的元素是value ,而rng[key+1]是從鍵開始的列表的副本(獨家的)。 將這些連接在一起,您將獲得一個副本,其中替換了密鑰。

# key=0; value=3; rng=[1,2]
print(rng.__setitem__(key, value) or rng)

如果你不想修改原始列表rng ,你可以這樣做

print((_:=list(rng)).__setitem__(key, value) or _)

不幸的是,這會泄漏變量_

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM