将一个列表的元素添加到另一个列表中的特定位置:Python

时间:2017-07-27 04:53:35

标签: python-3.x

我看到的几乎所有问题都是:这个问题更多的是关于连接或者在列表中的元素之间添加空格等。

假设我有:


pattern = '(?<![\w])attachment'

我希望将b中的元素添加到a中的每个元素之后,以便最终得到a = [1, 3, 5, 7, 9] b = [2, 4, 6, 8, 10] 。我该怎么做呢?

4 个答案:

答案 0 :(得分:3)

System.setProperty("javax.net.ssl.trustStore", "C:/Path/To/My/Cacerts/cacerts");

这需要c = [] for i in range(len(a)): c.append(a[i]) c.append(b[i]) a的长度相同。如果它们不同,你将不得不稍微增加它,但它将是相同的想法。

如果您的目标只是希望获得ba的排序列表......

b

答案 1 :(得分:2)

itertools中有一个roundrobin食谱,但这对您的示例来说有点矫枉过正,但确实可以使用不等长。
对于等长的子列表,您需要做的只是zip()并展平:

>>> [n for p in zip(a, b) for n in p]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

或使用itertools.chain.from_iterable

>>> import itertools as it
>>> list(it.chain.from_iterable(zip(a, b)))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

或者,您可以编写自己的生成器:

def gen(a, b):
    for x, y in zip(a, b):
        yield x
        yield y

>>> list(gen(a, b))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

答案 2 :(得分:2)

循环使用insert()作品并且相对简单:

for i in range(len(a)):
    a.insert(2*(i)+1, b[i])

注意list.insert()需要将每个后续列表条目移回内存中的一个位置,这对于大型列表来说是非常低效的,来自collections.deque的deque(想想双链表)可能是更好的选择。

如果您要分配新列表:

c = []
for i in range(len(a)):
    c.append(a[i])
    c.append(b[i])

另请注意,此特定实现仅适用于长度相等的列表。

答案 3 :(得分:1)

这可能会有所帮助......

def alternateListInsert(a,b):
    fIndex = 1
    for i in range(len(b)):
        a.insert(fIndex,b[i]);
        fIndex += 2

    return a