使用另一个列表和索引列表生成列表

时间:2019-12-09 19:34:20

标签: python list list-comprehension

假设我有以下两个列表和较小的索引列表:

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]

如果我只有list1idx,该如何写列表推导来生成list2(与list1一样长),使得list2索引为list1的值为idx,否则为0的值。

2 个答案:

答案 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])