How can I get the concatenation of two lists in Python without modifying either one?
本问题已经有最佳答案,请猛点这里访问。
在python中,我能找到连接两个列表的唯一方法是
是:
根据创建后您将如何使用它,
1 2 3 4 | >>> import itertools >>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> c = itertools.chain(a, b) |
这样就为组合列表中的项目创建了一个生成器,其优点是不需要创建新的列表,但是您仍然可以使用
1 2 3 4 5 6 7 8 | >>> for i in c: ... print i 1 2 3 4 5 6 |
如果您的列表很大,并且效率是一个问题,那么来自
请注意,这个示例使用了
你也可以使用
1 2 3 4 | >>> 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] |
这通常适用于任何具有
1 2 3 4 5 6 7 8 | >>> 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 |
除了弦乐之外:
1 2 3 4 | >>> 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] |
您总是可以创建一个新列表,这是添加两个列表的结果。
1 2 3 | >>> k = [1,2,3] + [4,7,9] >>> k [1, 2, 3, 4, 7, 9] |
列表是可变序列,所以我想通过扩展或追加来修改原始列表是有意义的。
如果要连接两个以上的列表:
1 2 3 4 5 6 7 | 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) |
实际上,它不会为您节省任何时间(中间列表仍在创建中),但如果您有可变数量的列表要扁平化,则非常好,例如,
只想让你知道:
编写