我有两个列表:
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']
如何实现这一点呢?我查看了切片,但是我无法弄清如何选取一组元素并交换它们。
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))]
这应该能行:
l3 = [l2[i] if (i%6>2) else l1[i] for i in range(0, min(len(l1), len(l2)))]
这是一个更加明确的解决方案(并且可以进一步优化),但只要l1
和l2
大小相同,就能解决问题:
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']
以下函数将使用间隔值“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']
这是一个版本:
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))]
我将l1
和l2
视为a
的子列表,并为每3个元素选择其中一个。
这个版本会更Pythonic(最初已发布在这里):
l3 = [l1_l2[(i // 3 % 2)] for i, l1_l2 in enumerate(zip(l1, l2))]
另一种方法:
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']