我想将存储在列表indices
中的索引对应的list1
元素替换为list2
元素。以下是当前的代码:
j=0
for idx in indices:
list1[idx] = list2[j]
j+=1
是否有可能使用lambda函数或列表推导式将上述四行代码写成一行?
编辑
list1
包含浮点数
list2
包含浮点数
indices
包含介于0
和len(list1)
之间的整数
我想将存储在列表indices
中的索引对应的list1
元素替换为list2
元素。以下是当前的代码:
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
条目?应该用list2
的条目(按顺序)替换list1[idx]
的条目。 - vyi虽然不是一行代码,但我认为下面这个替代方案更易读:
for i, v in zip(indices, list2):
list1[i] = v
list1[i] = v
移动到与for
循环相同的行上,那么它就只有一行了,这绝对是最简洁的答案! - Tadhg McDonald-Jensen虽然不太美观,但您可以按照以下方式解决:
map(list1.__setitem__, indices, list2)
list1
、list2
和indices
会包含什么吗? - Aaron Christiansenx = [0, 0, 0]; [x.__setitem__(i, 5) for i in range(3)]; print(x)
将会输出[5, 5, 5]
。 - Aaron Christiansen