将python中的两个列表合并为一个

时间:2015-10-29 19:56:55

标签: python python-2.7 python-3.x

我需要将两个列表合并到一个列表中并打印出来

例如:

list1 = [9, 3, 5, 7]
list2 = [5, 4 , 6]

list3 = [9, 5, 3, 4, 5, 6, 7]

我需要用“for”或“while”来做,因为我们还没有学到比这更先进的东西。

我现在的代码:

list1 = [3, 4, 5, 6]
list2 = [1, 2, 0, 9, 9]
tlist = []
n1 = len(list1)
n2 = len(list2)
n3 = n1 + n2
n4 = len(list2) - 1
n5 = len(list1) - 1
i = 1
c = 0
while i in range(0, n3):
    tlist.insert(i, list1[c])
    tlist.insert(i, list2[c])    
    c += 1
    i += 2
tlist.extend(list2[n4:])
tlist.extend(list1[n5:])
for num in tlist:
    print num

结果是:

3
1
4
2
5
0
6
9
9
6

(那就是最终应该如何) 所以如果len(list1)= len(list2)我就设法做到了 但是如果列表长度不同则无法正常工作

2 个答案:

答案 0 :(得分:0)

无论列表长度如何,您的代码始终会附加每个列表的最后一个元素。相反,请尝试此扩展程序:

tlist.extend(list2[c+1:])
tlist.extend(list1[c+1:])

我得到了这个改变的预期输出:它从循环离开的地方(c)开始,而不是从最后一个元素(n4,n5)开始。

另外,你的while循环绑定是错误的;仅当两个列表长度相差不超过1时,它才有效。否则,您将获得超出范围错误的下标。试试这个:

for c in range(min(n1, n2)):
    tlist.insert(i, list1[c])
    tlist.insert(i, list2[c])
    i += 2
    # do not increment c; the for statement handles that part.

当任何一个列表用完时,这将退出复制。

顺便说一句,更改为有意义的变量名称。 n1-n5系列没有告诉我们他们的目的。 ' C'和'我'也很弱。不要害怕输入更多。

更新的程序,包括加长的测试用例:

list1 = [3, 4, 5, 6]
list2 = [1, 2, 0, 9, 8, 7, -1]
tlist = []
n1 = len(list1)
n2 = len(list2)
n4 = len(list2) - 1
n5 = len(list1) - 1
i = 1

for c in range(min(n1, n2)):
    tlist.insert(i, list1[c])
    tlist.insert(i, list2[c])
    i += 2
    print tlist

tlist.extend(list2[c+1:])
tlist.extend(list1[c+1:])

print tlist

答案 1 :(得分:0)

只需使用" +"添加两个列表合并它们。

In [1]: a = [1,2,3]

In [2]: b = [2,3]

In [3]: a+b
Out[3]: [1, 2, 3, 2, 3]

或者您可以执行以下操作:

for i in b:
   ...:     a.append(i)
   ...:     

In [5]: a
Out[5]: [1, 2, 3, 2, 3]