Объединить элементы в списке списков - PullRequest
0 голосов
/ 13 октября 2018

У меня есть список списков, подобных этому:

A = [('b', 'a', 'a', 'a', 'a'), ('b', 'a', 'a', 'a', 'a')]

Как мне объединить все элементы каждого внутреннего списка, чтобы получить результат A = ['baaaa', 'baaaa']?Я бы предпочел сделать это вне цикла, если это возможно, чтобы ускорить код.

Ответы [ 4 ]

0 голосов
/ 13 октября 2018

Если вы предпочитаете функциональное программирование.Вы можете использовать функцию уменьшить .Вот как вы можете достичь того же результата, используя функцию «уменьшить» следующим образом.

Обратите внимание, что Reduce был встроенной функцией в Python 2.7, но в Python 3 он перемещается в библиотеку functools

from functools import reduce

Требуется только импортесли вы используете python 3, в противном случае нет необходимости импортировать Reduction из functools

A = [('b', 'a', 'a', 'a', 'a'), ('b', 'a', 'a', 'a', 'a')]
result = [reduce(lambda a, b: a+b, i) for i in A]

Если вы не хотите использовать циклическое или даже списочное понимание, вот другой способ

 list(map(lambda i: reduce(lambda a, b: a+b, i), A))
0 голосов
/ 13 октября 2018

Используйте метод соединения пустой строки.Это означает: «создать строку, объединяющую каждый элемент кортежа (например, ('b', 'a', 'a', 'a', 'a')) с '' (пустая строка) между каждым из них.

Таким образом, вы ищете:

 [''.join(x) for x in A]
0 голосов
/ 13 октября 2018

Если вы не хотите писать цикл, вы можете использовать map и str.join

>>> list(map(''.join, A))
['baaaa', 'baaaa']

Однако цикл, использующий понимание списка , почти такой же короткий для написания, и я думаю, что он более понятен:

>>> [''.join(e) for e in A]
['baaaa', 'baaaa']
0 голосов
/ 13 октября 2018

Вы можете использовать str.join:

>>> ["".join(t) for t in A]
['baaaa', 'baaaa']
>>>
>>>
>>> list(map(''.join, A)        #with map
['baaaa', 'baaaa']
>>>
>>> help(str.join)
Help on method_descriptor:

join(...)
    S.join(iterable) -> str

    Return a string which is the concatenation of the strings in the
    iterable.  The separator between elements is S.

>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...