使用另一个列表中的值在多个索引处添加特殊字符的最快方法
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 中不转换 l1
和 l2
的更小形式:
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]
我有 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 中不转换 l1
和 l2
的更小形式:
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]