我想替換那些list1
的元素,其索引存儲在列表indices
中list2
元素。以下是當前的代碼:Python單行要替換一個列表索引
j=0
for idx in indices:
list1[idx] = list2[j]
j+=1
是否有可能寫一行程序使用lambda函數或列表理解上述四行?
編輯
list1
包含浮點值
list2
包含浮點值
indices
包含0
和len(list1)
我想替換那些list1
的元素,其索引存儲在列表indices
中list2
元素。以下是當前的代碼:Python單行要替換一個列表索引
j=0
for idx in indices:
list1[idx] = list2[j]
j+=1
是否有可能寫一行程序使用lambda函數或列表理解上述四行?
編輯
list1
包含浮點值
list2
包含浮點值
indices
包含0
和len(list1)
# A test case
list1 = [0, 1, 2, 3, 4, 5, 6]
list2 = ['c', 'e', 'a']
indices = [2, 4, 0]
# Use conditional expressions
new_list = [list2[indices.index(idx)] if idx in indices else v for idx, v in enumerate(list1)] # idx2 = indices.index(idx), for list2
print(new_list)
# Output
['a', 1, 'c', 3, 'e', 5, 6]
嗨,這個看起來不正確。爲什麼選擇'list2'的'idx'條目? 'list1 [idx]'條目將被替換爲'list2'條目(以串行方式)。 – vvy
@vvy,thx,我用一個例子編輯了我的答案。結果與您的原始代碼一致。 – SparkAndShine
的整數這不是那麼漂亮,但你可以解決這個問題是這樣的:
map(list1.__setitem__, indices, list2)
你會說它在Python 3中不起作用。 – vaultah
雖然很聰明,但PEP 20可能會反對。 – boardrider
我同意你們,但OP要求提供「單線」,我交付了它:) – zoubida13
雖然它不是一個襯墊,這裏是我認爲是更具可讀性的替代:
for i, v in zip(indices, list2):
list1[i] = v
當然,如果你將'list1 [i] = v'移動到'for'循環的同一行上,那麼它就是1行,這絕對是最乾淨的答案! –
沒有,列表內涵不能修改現有列表。 –
你能舉一個'list1','list2'和'incides'包含的例子嗎? –
@MorganThrapp創建新列表的選項是* open *! – vvy