使用另一个列表中的值在多个索引处添加特殊字符的最快方法

Fastest way to add special character at multiple indices using values from another list

我有 2 个列表。

l1 = [1,3,6]
l2 = [10,20,30,30,40]

我需要一种更快的方法来构建列表,如下所示:

l3 = [10,!,20,!,30,30,!,40]

我试过 insert() at index 函数,但当列表很大时,它确实解决了问题。

使用 NumPy 可能会产生更快的代码。 OP放上他检查过的代码后就可以评估了:

l1 = np.array(l1, dtype=np.int64)
l2 = np.array(l2)

result_shape = l1.shape[0]+l2.shape[0]              # 8
result = np.zeros(result_shape, dtype=object)       # [0 0 0 0 0 0 0 0]
ind = np.delete(np.arange(result_shape), l1)        # [0 2 4 5 7]

result[l1] = "!"                                    # [0 '!' 0 '!' 0 0 '!' 0]
result[ind] = l2                                    # [10 '!' 20 '!' 30 30 '!' 40]

或在 NumPy 中不转换 l1l2 的更小形式:

result_shape = len(l1)+len(l2)                      # 8
result = np.zeros(result_shape, dtype=object)       # [0 0 0 0 0 0 0 0]
ind = np.delete(np.arange(result_shape), l1)        # [0 2 4 5 7]

result[l1] = "!"                                    # [0 '!' 0 '!' 0 0 '!' 0]
result[ind] = l2                                    # [10 '!' 20 '!' 30 30 '!' 40]   

和循环(在小列表中循环比 NumPy 更快):

i = 0
j = l1[i]
for l in range(len(l1)+len(l2)):
    if l == j:
        l2.insert(j, "!")
        if i < len(l1) - 1:
            i += 1
            j = l1[i]