假设我有以下两个列表和较小的索引列表:
list1=[2,3,4,6,7]
list2=[0,0,0,0,0]
idx=[1,2]
我想使用列表1中指定索引处的值替换列表2中的值。 我可以使用以下循环进行操作:
for i in idx:
list2[i]=list1[i]
如果我只有list1
和idx
,该如何写列表推导来生成list2
(与list1
一样长),使得list2
索引为list1
的值为idx
,否则为0
的值。
答案 0 :(得分:4)
这将在每次__contains__
的调用中调用idx
,但对于较小的列表应该是合理的。
list2 = [list1[i] if i in idx else 0 for i in range(len(list1))]
或
list2 = [e if i in idx else 0 for i, e in enumerate(list1)]
此外,请勿编写这样的代码。它比您的示例可读性差得多。此外,numpy可以为您提供所需的语法,而不会牺牲可读性或速度。
import numpy as np
...
arr1 = np.array(list1)
arr2 = np.zeros_like(list1)
arr2[idx] = arr1[idx]
答案 1 :(得分:0)
我假设您想通过在特定索引处附加list1的值来生成list2。您要做的就是检查idx列表是否包含任何值,然后对每个循环使用a来将特定的list1值附加到list2。如果idx为空,则只能将list1 [0]附加到list2。
if(len(idx) > 0):
for i in idx:
list2.append(list1[i])
else:
list2.append(list1[0])