我怎样才能得到在Python中的两个列表的连接而不修改任何一个?

在Python中,我可以find连接两个列表的唯一方法是list.extend ,它修改第一个列表。 有没有任何连接函数返回其结果而不修改其参数?

是: list1+list2 。 这给出了一个新的列表,即list1list2的连接。

根据你创builditertools.chain来使用它可能是你最好的select:

 >>> import itertools >>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> c = itertools.chain(a, b) 

这为组合列表中的项目创build了一个生成器,其优点是不需要创build新列表,但是仍然可以像使用两个列表的连接一样使用c

 >>> for i in c: ... print i 1 2 3 4 5 6 

如果你的列表很大,效率是一个问题,那么itertools模块的这个和其他方法是非常方便的知道。

请注意,这个例子使用了c的项目,所以你需要重新初始化它,然后才能重用它。 当然你可以使用list(c)来创build完整的列表,但是这会在内存中创build一个新的列表。

你也可以使用sum ,如果你给它一个start参数:

 >>> list1, list2, list3 = [1,2,3], ['a','b','c'], [7,8,9] >>> all_lists = sum([list1, list2, list3], []) >>> all_lists [1, 2, 3, 'a', 'b', 'c', 7, 8, 9] 

这一般适用于任何有+运算符的东西:

 >>> sum([(1,2), (1,), ()], ()) (1, 2, 1) >>> sum([Counter('123'), Counter('234'), Counter('345')], Counter()) Counter({'1':1, '2':2, '3':3, '4':2, '5':1}) >>> sum([True, True, False], False) 2 

除了string的明显例外:

 >>> sum(['123', '345', '567'], '') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: sum() can't sum strings [use ''.join(seq) instead] 

怎么样list1 + list2

你总是可以创build一个新的列表,这是添加两个列表的结果。

 >>> k = [1,2,3] + [4,7,9] >>> k [1, 2, 3, 4, 7, 9] 

列表是可变序列,所以我想通过扩展或附加来修改原始列表是有意义的。

只是让你知道:

当你写list1 + list2 ,你正在调用list1__add__方法,它返回一个新的列表。 这样你也可以通过将__add__方法添加到你的个人类来处理myobject + list1

如果你有两个以上的列表来连接:

 import operator list1, list2, list3 = [1,2,3], ['a','b','c'], [7,8,9] reduce(operator.add, [list1, list2, list3]) # or with an existing list all_lists = [list1, list2, list3] reduce(operator.add, all_lists) 

它实际上并没有节省任何时间(中间列表仍然被创build),但是如果你有一个可变数量的列表来扁平化,例如*args ,那么这个列表很好。

Interesting Posts