Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 添加两个列表的最佳方式?_Python_List_Tuples - Fatal编程技术网

Python 添加两个列表的最佳方式?

Python 添加两个列表的最佳方式?,python,list,tuples,Python,List,Tuples,我有两张单子 list1 = [(100, A, 22), (200,B, 33), (300, C, 44)] 及 所以我想要的最终清单是 final_list = [ (100,A, 22, 333), (200,B,33,444), (300,C,44,0), (500,D,0,555)] 如果我只是加上这两个列表,它不会帮我解决问题。我怎样才能得到最终的名单 谢谢您的输入数据首先应该是字典: dict1 = {(100, "A"): 22, (200,"B"): 33, (300,

我有两张单子

list1 = [(100, A, 22), (200,B, 33), (300, C, 44)]

所以我想要的最终清单是

final_list = [ (100,A, 22, 333), (200,B,33,444), (300,C,44,0), (500,D,0,555)]
如果我只是加上这两个列表,它不会帮我解决问题。我怎样才能得到最终的名单


谢谢

您的输入数据首先应该是字典:

dict1 = {(100, "A"): 22, (200,"B"): 33, (300, "C"): 44}
dict2 = {(100, "A"): 333, (200,"B"): 444, (500, "D"): 555}
现在,您可以轻松构建一个组合dict:

>>> {k: (dict1.get(k, 0), dict2.get(k, 0))
...  for k in dict1.viewkeys() | dict2.viewkeys()}
{(100, 'A'): (22, 333), (200, 'B'): (33, 444), 
 (300, 'C'): (44, 0), (500, 'D'): (0, 555)}
(Python 2.7)

如果出于某种原因,您需要对列表进行操作,我建议您首先将列表转换为字典

dict1 = {(k1, k2): v for k1, k2, v in list1}
dict2 = {(k1, k2): v for k1, k2, v in list2}

您的输入数据首先应该是字典:

dict1 = {(100, "A"): 22, (200,"B"): 33, (300, "C"): 44}
dict2 = {(100, "A"): 333, (200,"B"): 444, (500, "D"): 555}
现在,您可以轻松构建一个组合dict:

>>> {k: (dict1.get(k, 0), dict2.get(k, 0))
...  for k in dict1.viewkeys() | dict2.viewkeys()}
{(100, 'A'): (22, 333), (200, 'B'): (33, 444), 
 (300, 'C'): (44, 0), (500, 'D'): (0, 555)}
(Python 2.7)

如果出于某种原因,您需要对列表进行操作,我建议您首先将列表转换为字典

dict1 = {(k1, k2): v for k1, k2, v in list1}
dict2 = {(k1, k2): v for k1, k2, v in list2}

考虑到A、B、C、D等是不可变的对象,最简单的方法是:

[list(set(x) | set(y)) for x, y in zip(list1, list2)]

考虑到A、B、C、D等是不可变的对象,最简单的方法是:

[list(set(x) | set(y)) for x, y in zip(list1, list2)]

当列表也是关键字时,使用它作为变量名是个坏主意。@Hooked:
list
不是一个变量名。无论如何,把它用作标识符是个坏主意,因为它是一个内置类型的名称。@SvenMarnach直到你指出这一点,我才意识到区别。我假设python允许您为任何保留字分配一个变量(我错误地假设内置类型属于该组)。因此,似乎您可以使用
集合
列表
变量,但不能使用
for
yield
。你知道这背后的基本原理吗?@Hooked:关键字是语法的一部分,而内置名称在语法上与用户定义的名称等效。解析器不需要处理与用户定义名称
x
不同的
list
——它只是一个名称。相反,解析器确实需要对和进行不同的处理。内置名称和关键字是非常不同的东西。@SvenMarnach这很有意义!解析器必须确定执行顺序,关键字会影响执行顺序,但类型就是类型,不管是谁创建的。我想我的困惑来自于我的C背景,其中一个内置类型,如
int
是一个关键字。当它也是一个关键字时,使用
list
作为变量名是个坏主意。@Hooked:
list
不是一个关键字。无论如何,把它用作标识符是个坏主意,因为它是一个内置类型的名称。@SvenMarnach直到你指出这一点,我才意识到区别。我假设python允许您为任何保留字分配一个变量(我错误地假设内置类型属于该组)。因此,似乎您可以使用
集合
列表
变量,但不能使用
for
yield
。你知道这背后的基本原理吗?@Hooked:关键字是语法的一部分,而内置名称在语法上与用户定义的名称等效。解析器不需要处理与用户定义名称
x
不同的
list
——它只是一个名称。相反,解析器确实需要对和进行不同的处理。内置名称和关键字是非常不同的东西。@SvenMarnach这很有意义!解析器必须确定执行顺序,关键字会影响执行顺序,但类型就是类型,不管是谁创建的。我猜我的困惑来自于我的C语言背景,其中一个内置类型,如
int
,是一个关键字。你可能想先试用一下。学习python:你能解释一下这里到底发生了什么吗?你可能想先试用一下。学习python:你能解释一下这里到底发生了什么吗?