Python-合并两个2D列表,覆盖其中一个的值

Python-合并两个2D列表,覆盖其中一个的值,python,list,Python,List,我有两个,两维的列表 list 1 = [[None, None], [None, None], [None, None]] list 2 = [[1, 2], [3, 4]] 所需输出为 list 3 = [[1, 2], [3, 4], [None, None]] 如果有一个更简单的解决方案,我这样做是因为我并不总是拥有列表中第三个元素的数据。我需要列表中始终有三个第一级项目。我正在尝试阻止脚本抛出超出范围的错误 希望通过一些额外的上下文来解决以下问题 在我的应用程序中,当数据库查询返回

我有两个,两维的列表

list 1 = [[None, None], [None, None], [None, None]]
list 2 = [[1, 2], [3, 4]]
所需输出为

list 3 = [[1, 2], [3, 4], [None, None]]
如果有一个更简单的解决方案,我这样做是因为我并不总是拥有列表中第三个元素的数据。我需要列表中始终有三个第一级项目。我正在尝试阻止脚本抛出超出范围的
错误

希望通过一些额外的上下文来解决以下问题

在我的应用程序中,当数据库查询返回放入列表的结果时,就会出现这种情况,例如“最大的10个问题”。有时候事情并不那么糟糕,只有9个问题

当应用程序的另一部分查找第10个问题(Flask网站)时,它抛出错误。Try/Except确实有效,但会很重

所以我需要一个解决方案,我可以创建一个占位符值列表,并用数据覆盖它们(如果可用)


接受的解决方案只需一行代码就可以很好地工作。

我想这就是你的意思

list_3 = [ list_2[i] if i < len(list_2) else e for i,e in enumerate(list_1) ]
list_3=[list_2[i]if i
这里是没有列表理解的等价物

list_3 = list()
for i,e in enumerate(list_1):
    if i < len(list_2):
        list_3.append(list_2[i])
    else:
        list_3.append(e)
list_3=list()
对于枚举中的i,e(列表1):
如果i
我想这就是你的意思

list_3 = [ list_2[i] if i < len(list_2) else e for i,e in enumerate(list_1) ]
list_3=[list_2[i]if i
这里是没有列表理解的等价物

list_3 = list()
for i,e in enumerate(list_1):
    if i < len(list_2):
        list_3.append(list_2[i])
    else:
        list_3.append(e)
list_3=list()
对于枚举中的i,e(列表1):
如果i
您不需要创建新列表。只需使用以下内容访问
list2

list2[10] if 10 < len(list2) else [None, None]
list2[10]如果10
我使用的指数如下10,但在您的情况下,它很可能是一个变量:

list2[i] if i < len(list2) else [None, None]
list2[i]如果我
您不需要创建新列表。只需使用以下内容访问
list2

list2[10] if 10 < len(list2) else [None, None]
list2[10]如果10
我使用的指数如下10,但在您的情况下,它很可能是一个变量:

list2[i] if i < len(list2) else [None, None]
list2[i]如果我< /代码> 如果您想对两个列表做些事情,请考虑使用<代码> ItRealths.IZIPuxLime来组合它们。

In [1]: list1 = [[None, None], [None, None], [None, None]]

In [2]: list2 = [[1, 2], [3, 4]]

In [3]: import itertools

In [8]: [a for a, b in itertools.izip_longest(list2, list1, fillvalue=[None, None])]
Out[8]: [[1, 2], [3, 4], [None, None]]

< P>注意,在Python 3中,名称是“代码> ItTrimeS.ZIPuxLime./P>>P>如果您想对两个列表做一些事情,请考虑使用<代码> ItRealths.IZIPixLime来组合它们。

In [1]: list1 = [[None, None], [None, None], [None, None]]

In [2]: list2 = [[1, 2], [3, 4]]

In [3]: import itertools

In [8]: [a for a, b in itertools.izip_longest(list2, list1, fillvalue=[None, None])]
Out[8]: [[1, 2], [3, 4], [None, None]]

请注意,在Python 3中,名称为
itertools.zip\u longest

您可以通过以下方式执行此操作:

list_3 = list_2 + list_1[len(list_2):]

但我不确定需要做什么。

您可以这样做:

list_3 = list_2 + list_1[len(list_2):]

但我不确定需要做什么。

我不确定我是否完全理解您的问题,但我想您可能希望:

list1 = [[None, None], [None, None], [None, None]]
list2 = [[1, 2], [3, 4]]
list3 = list2 + list1[len(list2):]

在第三行中,list2中的所有元素将替换list1中的
len(list2)
元素,但保留其余元素不变。如果这是您想要的,您应该确保列表1的长度不小于列表2,否则,它将引发
索引器

我不确定我是否完全理解您的问题,但我想您可能需要:

list1 = [[None, None], [None, None], [None, None]]
list2 = [[1, 2], [3, 4]]
list3 = list2 + list1[len(list2):]

在第三行中,list2中的所有元素将替换list1中的
len(list2)
元素,但保留其余元素不变。如果这是您想要的,您应该确保列表1的长度不小于列表2,否则,它将引发
索引器

您可以使用一个生成器,它首先从
列表2
生成元素,然后生成
值。然后,只需从生成器中获取前3个元素

from itertools import chain, islice, repeat
list_2 = [[1, 2], [3, 4]]
list_3 = list(
    islice(
        chain(
            list_2,
            repeat(None)
        ),
        3))

但您可能面临一个典型的数据丢失问题。如果你要处理大量数据,我建议你使用熊猫。以下是Pandas文档中的相关文本:

您可以使用一个生成器,该生成器首先从
列表2
生成元素,然后生成
值。然后,只需从生成器中获取前3个元素

from itertools import chain, islice, repeat
list_2 = [[1, 2], [3, 4]]
list_3 = list(
    islice(
        chain(
            list_2,
            repeat(None)
        ),
        3))

但您可能面临一个典型的数据丢失问题。如果你要处理大量数据,我建议你使用熊猫。以下是熊猫文档中的相关文本:

为什么
[[1,2],[3,4],[None,None]]
?我也没有看到任何覆盖?您也可以使用try/except来避免任何错误。您能告诉我们产生超出范围错误的代码吗?你可能做错了什么。你能举更多的例子说明你想做什么吗?为什么
[[1,2],[3,4],[None,None]
?我也没有看到任何覆盖?您也可以使用try/except来避免任何错误。您能告诉我们产生超出范围错误的代码吗?你可能做错了什么。你能举更多的例子说明你想做什么吗?