Python - 如何合并和交换两个列表的每第n个元素

3

我有两个列表:

l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

l2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']

我的期望输出是:

l3 = [1, 2, 3, 'd', 'e', 'f', 7, 8, 9, 'j', 'k', 'l']

如何实现这一点呢?我查看了切片,但是我无法弄清如何选取一组元素并交换它们。
6个回答

6
l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
l2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']

n = 3

l3 = [elem[(idx // n) % 2] for idx, elem in enumerate(zip(l1, l2))]

0

这应该能行:

l3 = [l2[i] if (i%6>2) else l1[i] for i in range(0, min(len(l1), len(l2)))]

0

这是一个更加明确的解决方案(并且可以进一步优化),但只要l1l2大小相同,就能解决问题:

l1 = [1,2,3,4,5,6,7,8,9,10,11,12]

l2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']

def combine(l1, l2, split_size):
    iterations = int((len(l1)/split_size))
    l3 = []
    for x in range(0, iterations):
        if (x % 2) == 0:
            for i in range(0, split_size):
                l3.append(l1[(x * split_size) + i]) 
        else:
            for i in range(0, split_size):
                l3.append(l2[(x * split_size) + i]) 
    return l3

print(combine(l1, l2, 3))

输出

[1, 2, 3, 'd', 'e', 'f', 7, 8, 9, 'j', 'k', 'l']

0

以下函数将使用间隔值“n”进行合并:

def mergeWithInterval(n, l1,l2):
    l = []
    c = 0
    f = True
    for i,j in zip(l1, l2):
        if f == True:
            l.append(i)
        else:
            l.append(j)
        c+=1

        if c%n == 0:
            f = not f
    return l


l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
l2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
mergedList = mergeWithInterval(3,l1,l2)
print(mergedList)

输出:

[1, 2, 3, 'd', 'e', 'f', 7, 8, 9, 'j', 'k', 'l']

0

这是一个版本:

l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
l2 = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"]
a = (l1, l2)
l3 = [a[(i // 3 % 2)][i] for i in range(len(l1))]

我将l1l2视为a的子列表,并为每3个元素选择其中一个。

这个版本会更Pythonic(最初已发布在这里):

l3 = [l1_l2[(i // 3 % 2)] for i, l1_l2 in enumerate(zip(l1, l2))]

0

另一种方法:

n = 3

[j[0] if (i // n % 2 == 0) else j[1] for i, j in enumerate(zip(l1, l2))]

#[1, 2, 3, 'd', 'e', 'f', 7, 8, 9, 'j', 'k', 'l']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接