Python一个班轮代替列表索引

时间:2016-05-16 15:50:47

标签: python

我想用list1元素替换其索引存储在列表indices中的list2元素。以下是当前代码:

j=0
for idx in indices:
   list1[idx] = list2[j]
   j+=1

是否可以使用 lambda函数列表理解为上述四行写一个单行?

修改
list1包含浮点值
list2包含浮点值
indices包含0len(list1)

之间的整数

3 个答案:

答案 0 :(得分:4)

使用conditional expressions

# 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]

答案 1 :(得分:3)

虽然它不是单行,但我认为这是一种更具可读性的替代方案:

for i, v in zip(indices, list2):
    list1[i] = v

答案 2 :(得分:2)

它不是那么漂亮,但你可以像这样解决它:

map(list1.__setitem__, indices, list2)