合并特定元素后的列表

时间:2014-08-29 20:06:58

标签: python list for-loop merge

我想将两个列表合并在一起(ListAListB)。但是,在ListA

中的某个元素之后,问题就出现了

用户输入的元素ListB应与listA合并。

例如;

ListA = [2,1,0]
ListB = [4,5,6]

用户输入 1

输出:

new_list = [2, 4, 5, 6, 1, 0]

现在我正在考虑使用for loop,但由于我对for loops的了解有限,我不知道如何在循环一定量后让循环停止。

3 个答案:

答案 0 :(得分:4)

切片分配实际上非常简单,如Lists上的教程部分所述:

ListA = [2,1,0]
ListB = [4,5,6]

# make a copy -- I'm assuming you don't want to modify ListA in the process.
new_list = ListA[:]
# insert ListB at a particular location.  I've arbitrarily chosen `1`
# basically this says to take the empty section of the list
# starting just before index 1 and ending just before index 1 and replace it
# with the contents of ListB
new_list[1:1] = ListB
# Check the output to make sure it worked.
print(new_list)  # [2, 4, 5, 6, 1, 0]

答案 1 :(得分:0)

ListA = [2,1,0]
ListB = [4,5,6]
a=[]
def merg(i):
 for i in range(i):
  a.append(ListA[i])
 for j in ListB:
  a.append(j)
 a.append(ListA[i+1])
 return a

print merg(2)

样本:

[2, 1, 4, 5, 6, 0]

答案 2 :(得分:0)

这是一种可以在没有任何变异操作的情况下执行此操作的方法:

new_list = a[:i] + b + a[i:]

在实践中看到它:

>>> a = [2, 1, 0]
>>> b = [4, 5, 6]
>>> i = 1
>>> new_list = a[:i] + b + a[i:]
>>> new_list
[2, 4, 5, 6, 1, 0]

如果你不理解任何一件,你可以将其分解:

>>> a[:i]
[2]
>>> a[i:]
[1, 0]
>>> # etc.

那么,为什么要在不改变操作的情况下这样做呢?很多可能的原因:

  • 不会改变值的代码更容易推理。它就像一个数学函数;你不必考虑事情发生的顺序或每一步的状态。如果您不理解它,通常可以将其分解为更简单的部分,就像我上面所做的那样。
  • 通常你实际上想要来改变任何东西。在这种情况下,我们不必提前复制a,因为我们不会修改它。
  • 它可以更具可读性,甚至更新手友好。在这种情况下,您仍然需要了解切片,而不是切片分配。
  • 通常会更短。这是一个单线而不是双线。
  • 通常效率更高。这样可以避免复制整个列表,然后将大部分元素移到右侧。

但它的可读性更低,更冗长,效率更低。因此,值得了解两种做法,因此您可以根据具体情况决定哪种方式适合。