выборочное присоединение к списку на Python для получения строки - PullRequest
0 голосов
/ 21 ноября 2018

Допустим, у меня есть список в Python, например:

['ann', 'nne', 'nef', 'efr', 'fra', 'ran', 'ank', 'nk']

Возможно ли использовать объединение списков для выборочного добавления элементов списка.Например, я добавляю полный element0, но для других элементов списка я просто добавляю последний символ (также я добавляю последний символ элемента, только если его длина равна 3).поэтому строка становится такой:

"ann"+"e"+"f"+"r"+"a"+"n"+"k"= annefrank 

Последний элемент не добавляется, поскольку он не имеет длины 3. Я могу решить эту проблему с помощью цикла for, но хотел бы знать, существует ли какой-либо оптимизированный питонский способ сделать этоили используя соединение.

Спасибо в ожидании.AIA

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Поскольку у вас есть определенные требования, вам все равно нужно применить некоторую пользовательскую логику, независимо от выбранной вами парадигмы.

Я бы использовал функциональные инструменты 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, а не зацикливание последовательности, поскольку они имеют высоко оптимизированные реализации.

0 голосов
/ 22 ноября 2018

Вы можете создать список из третьей буквы из каждого элемента в списке:

    mylist = ['ann', 'nne', 'nef', 'efr', 'fra', 'ran', 'ank', 'nk']
    thirdletters = [ x[2:3] for x in mylist ]

(последний элемент в этом новом списке будет пустой строкой, поскольку в 'nk нет третьей буквы') затем соберите эти буквы в строку, используя join с пустой строкой в ​​качестве заполнителя:

    thirdstring = ''.join(thirdletters)

, а затем, наконец, добавьте эту строку после первых двух букв первого элемента из исходного списка:

    result = mylist[0][:2] + thirdstring

Если это слишком многословно, вы можете объединить все это в одно утверждение:

    result = mylist[0][:2] + ''.join( [ x[2:3] for x in mylist ] )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...