Поскольку у вас есть определенные требования, вам все равно нужно применить некоторую пользовательскую логику, независимо от выбранной вами парадигмы.
Я бы использовал функциональные инструменты Python для фильтрации последовательности:
import operator
import functools
seq = ['ann', 'nne', 'nef', 'efr', 'fra', 'ran', 'ank', 'nk']
functools.reduce(operator.add, (map(lambda x: x[-1], filter(lambda x: len(x)==3, seq[1:]))), seq[0])
# gives annefrank
Внутренний filter
заботится об элементах, которые не имеют длину 3, кроме первого элемента списка.map
вернет свой последний символ, а reduce
применит к ним add
с первым элементом списка в качестве начального значения.
Вы также можете сделать это с join
, если хотите:
seq[0]+''.join((map(lambda x: x[-1], filter(lambda x: len(x)==3, seq[1:]))))
# gives annefrank
Вы также можете объединить фильтр с картой:
seq[0]+''.join((map(lambda x: x[-1] if len(x)==3 else '', seq[1:])))
Как видите, есть много способов достичь того, что вы хотите сделать.Однако я предпочитаю map
и filter
, а не зацикливание последовательности, поскольку они имеют высоко оптимизированные реализации.