同时扩展两个列表

3
我有两个列表(list_1、list_2),还有一个返回两个列表(list_1_f、list_2_f)的函数。我希望将list_1_f的项目添加到list_1中,将list_2_f的项目添加到list_2中:
def lists():
    list_1_f = [10,10,10]
    list_2_f = [20,20,20]    
    return list_1_f,list_2_f

list_1, list_2 = [1,1,1], [2,2,2]

我将始终拥有两个原始列表,扩展仅针对另外两个额外列表进行,没有其他可能性。因此最终我将拥有两个列表,其中包含原始项目和从函数中获取的项目,并且输出将是:

list_1 = [1,1,1,10,10,10]
list_2 = [2,2,2,20,20,20]

我用extend函数尝试了以下代码行,但都不起作用:
list_1.extend([]), list_2.extend([]) = lists()
list_1.extend(), list_2.extend() = lists()
list_1.extend, list_2.extend = lists()

我可以始终执行以下操作:

list_1a, list_2a = lists()
list_1.extend(list_1a)
list_2.extend(list_2a)

但我想知道是否有可能做出这个扩展,而不必创建两个中间列表。


1
你并不是在中间“创建”两个列表,它们已经存在于内存中,你只是给它们起了名字。 ;) 我认为没有简单的选项可以做到这一点,因为= lists()是将此值分配给=之前的名称,但你不想进行分配,而是想将该值传递给一个方法。 - h4z3
1
这个问题不应该被设置为之前由OP提出的不清楚的重复问题。该问题已经被修改并且现在似乎更加清晰。因此重新开放。 - yatu
@yatu 这是完全重复的! - Andras Deak -- Слава Україні
是的@AndrasDeak,那个重复问题在关闭后被修改了。最初它不够清晰,所以被关闭了。那篇文章更新后更加清晰,与这篇文章相同,但由于没有重新开放,OP决定再次提问? - yatu
哦,你实际上建议OP重新提问以回答问题!非常流畅,@yatu,同时解释了一切。 - Andras Deak -- Слава Україні
显示剩余5条评论
3个回答

4

为处理多个列表,您应该使用嵌套列表。例如,如果您最初有以下嵌套列表:

l =  [[1,1,1], [2,2,2]]

你可以使用zip函数来处理嵌套列表,并使用map函数和operator.add函数来扩展返回的子列表。
from operator import add

extended_list = *map(add, *zip(l, lists())),
# ([1, 1, 1, 2, 2, 2], [10, 10, 10, 20, 20, 20])

1
你可以迭代,所以你可以做类似这样的事情:

list_1.extend(lists()[0])
list_2.extend(lists()[1])

这个方法可以实现,但可读性不高。如果你想将一些列表添加到list_of_lists=[list_1,list_2]中,那么你可以按照以下方式操作:

for n in list_of_lists:
  list_of_lists[n].extend(lists()[n])

希望它有所帮助!

0

你可以通过简单地对它们进行求和来将一个列表扩展到另一个列表:

[1,2,3] + [4,5,6]

[1, 2, 3, 4, 5, 6]

因此,您的代码可能如下所示:

def lists():
    list_1_f = [10,10,10]
    list_2_f = [20,20,20]    
    return list_1_f,list_2_f

list1 = [0]
list2 = [999]

list1 = list1 + lists()[0]
list2 = list2 + lists()[1]

print(list1, list2)

[0, 10, 10, 10] [999, 20, 20, 20]

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