在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
但这似乎很容易出现bug --直接调用copy?(我知道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
但是来吧..。这是python!所以..。执行此操作的首选方法是什么?
发布于 2018-07-20 08:57:48
问题出在哪里:
from itertools import chain
def chain_sequences(*sequences):
return chain(*sequences)
https://stackoverflow.com/questions/14342242
复制相似问题