Python: 将一个二维列表附加到另一个二维列表

3
我正在尝试将一个二维列表附加到另一个二维列表中,方法如下:
list1 = [('a', '1'), ('b', '2'), ('c', '3')]
list2 = [('d', '4'), ('e', '5'), ('f', '6')]

如果我将list1附加到list2中,应该输出:
list2 = [('d', '4'), ('e', '5'), ('f', '6'), ('a', '1'), ('b', '2'), ('c', '3')]

我尝试用以下代码解决问题:
for x, y in list1:
    list2.append([x, y])

这给了我以下错误:

Traceback (most recent call last):
    File "C:\Python27\SortCounty.py", line 59, in <module>
        for x, y in final_list:
ValueError: too many values to unpack

1
请展示给我们您正在使用的实际输入和代码。您展示的是 list1list2,而您的回溯(traceback)却提到了 final_list。对于您展示的输入和代码,您不应该会出现任何错误。有些您没有向我们展示的代码或输入将会严重阻碍我们提供帮助的能力。 - inspectorG4dget
1
你发布的代码并没有产生你所报告的错误。错误信息表明,你实际输入的内容包含超过2个元素的序列。 - Laurence Gonsalves
4个回答

4
简单来说,使用+运算符即可。您可以使用+运算符连接两个列表。
>>> list1 = [('a', '1'), ('b', '2'), ('c', '3')]
>>> list2 = [('d', '4'), ('e', '5'), ('f', '6')]
>>> list2 + list1
[('d', '4'), ('e', '5'), ('f', '6'), ('a', '1'), ('b', '2'), ('c', '3')]

list2 += list1 这个操作是有效的吗? - algorhythm
1
@CMac:是的,这将会实现。 - inspectorG4dget
列表 .extend 更好,但会修改列表。 - vitiral

4

您可以使用extend来就地修改list2

>>> list2.extend(list1)
>>> list2
[('d', '4'), ('e', '5'), ('f', '6'), ('a', '1'), ('b', '2'), ('c', '3')]

如果您正在扩展一个大列表,那么这将特别有效,因为不会复制该列表:该操作的复杂度为O(k),其中k是您要添加的列表的长度。

这本质上与您问题中的代码行为相同,正如其他人所指出的那样,应该可以工作。实际上,extend应该会更快,因为对list1的循环被移到了C级别。

ValueError: too many values to unpack表示您的列表final_list中的一个或多个元组具有超过两个元素。这导致for x, y in final_list:此行引发错误,因为xy无法标记元组中的每个元素。


不是我,伙计。看起来是个好答案,所以不确定为什么有人会踩它。 - algorhythm
注意:extend适用于任何可迭代对象。如果您知道您正在使用的是list,那么执行list2 += list1与调用extend完全等效(实际上它应该更快一点,因为它避免了查找)。 - Bakuriu

2

在你的情况下,你应该简单地使用extend方法:

list2.extend(list1)

你的列表确实是二维列表,但你想要的结果并不依赖于此。因此,一个简单的extend就足够了。

0

('a','1')list1 中是一个单一元素

In [1]: list1 = [('a', '1'), ('b', '2'), ('c', '3')]

In [2]: list2 = [('d', '4'), ('e', '5'), ('f', '6')]

In [3]: for i in list1:
   ...:     list2.append(i)
   ...:     

In [4]: list2
Out[4]: [('d', '4'), ('e', '5'), ('f', '6'), ('a', '1'), ('b', '2'), ('c', '3')]

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