在每个n位置将一个列表的值插入另一个列表

时间:2018-11-11 16:13:00

标签: python

许多关于将相同的值插入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']

或者仅创建一个具有相同结果的第三个列表。

4 个答案:

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