在 Python 3 中连接序列的首选方法是什么?
现在,我正在做:
import functools
import operator
def concatenate(sequences):
return functools.reduce(operator.add, sequences)
print(concatenate([['spam', 'eggs'], ['ham']]))
# ['spam', 'eggs', 'ham']
需要导入两个单独的模块来执行此操作似乎很笨重。
一种替代方法可能是:
def concatenate(sequences):
concatenated_sequence = []
for sequence in sequences:
concatenated_sequence += sequence
return concatenated_sequence
但是,这是不正确的,因为您不知道序列是列表。
你可以这样做:
import copy
def concatenate(sequences):
head, *tail = sequences
concatenated_sequence = copy.copy(head)
for sequence in sequences:
concatenated_sequence += sequence
return concatenated_sequence
但这似乎很容易出错——直接调用复制?(我知道head.copy()
适用于列表和元组,但copy
不是序列 ABC 的一部分,所以你不能依赖它......如果你得到字符串怎么办?)。您必须复制以防止突变,以防您收到MutableSequence
. 此外,此解决方案会强制您首先解压缩整个序列集。再试一次:
import copy
def concatenate(sequences):
iterable = iter(sequences)
head = next(iterable)
concatenated_sequence = copy.copy(head)
for sequence in iterable:
concatenated_sequence += sequence
return concatenated_sequence
但是来吧……这是蟒蛇!那么......这样做的首选方法是什么?