许多关于将相同的单值插入n位置的另一个列表中的示例,但是找不到任何表明以下内容的示例:
采用以下列表:
list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
list2 = ['this', 'that', 'the', 'other']
每2个位置将list2的每个值插入list1以返回:
['a', 'b', 'this', 'c', 'd', 'that', 'e', 'f', 'the', 'g', 'h', 'other']
或者仅创建一个具有相同结果的第三个列表。
答案 0 :(得分:1)
您可以将zip
用于列表理解,并通过this recipe使用块list1
:
from itertools import chain
def chunks(L, n):
"""Yield successive n-sized chunks from L."""
for i in range(0, len(L), n):
yield L[i:i + n]
list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
list2 = ['this', 'that', 'the', 'other']
zipper = zip(chunks(list1, 2), list2)
res = list(chain.from_iterable((x, y, z) for (x, y), z in zipper))
['a', 'b', 'this', 'c', 'd', 'that', 'e', 'f', 'the', 'g', 'h', 'other']
答案 1 :(得分:1)
您可以尝试以下简单而干净的解决方案:
list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
list2 = ['this', 'that', 'the', 'other']
i=2
j=0
while(j<len(list1) and j<len(list2)):
list1.insert(i, list2[j])
i=i+3
j=j+1
print(list1)
答案 2 :(得分:1)
您可以尝试以下代码:
def insert_list(old_list, new_list, n):
for i, val in enumerate(new_list):
old_list.insert(n+i*3, val)
return old_list
测试:
list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
list2 = ['this', 'that', 'the', 'other']
print(insert_list(list1, list2, 2))
输出:
['a', 'b', 'this', 'c', 'd', 'that', 'e', 'f', 'the', 'g', 'h', 'other']
答案 3 :(得分:0)
insert可用于在列表中插入单个值
让我们看看文档中关于insert
的内容:
list.insert(i,x)
在给定位置插入项目。首先 参数是要插入的元素之前的索引,因此
a.insert(0, x)
插入列表的最前面,而a.insert(len(a), x)
等效于a.append(x)
。
在给定索引之前 插入。让我们看一个牢记这一点的示例实现:
def ins_n(lst1, lst2, n): # insert every n elements
indx1 = n
indx2 = 0
while(indx1 <= len(lst1)):
lst1.insert(indx1, lst2[indx2])
indx1 += 1 + n # add `1` because we insert before the given index
indx2 += 1
return lst1
使用示例列表和2
对其进行测试:
list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
list2 = ['this', 'that', 'the', 'other']
print(ins_n(list1, list2, 2))
输出:
['a', 'b', 'this', 'c', 'd', 'that', 'e', 'f', 'the', 'g', 'h', 'other']