У меня есть вложенный список строк как:

A = [["A","B","C"],["A","B"]]

Я пытаюсь объединить строки в подсписке, чтобы получить единый список строк:

B = [['ABC'],['AB']]

ИЛИ,

B = ['ABC','AB']

Я пытался использовать ''.join(A) и ''.join(str(v) for v in A), но они не работали.

Это ошибка, которую я получил:

Ошибка типа: элемент последовательности 0: ожидаемый экземпляр str, найден список

2
Hadij 26 Фев 2018 в 00:44

3 ответа

Лучший ответ

Вы можете использовать ''.join с map здесь, чтобы достичь этого как:

>>> A = [["A","B","C"],["A","B"]]
>>> list(map(''.join, A))
['ABC', 'AB']

# In Python 3.x, `map` returns a generator object.
# So explicitly type-casting it to `list`. You don't 
# need to type-cast it to `list` in Python 2.x

ИЛИ вы можете использовать его с списком , чтобы получить желаемый результат:

>>> [''.join(x) for x in A]
['ABC', 'AB']

Чтобы получить результаты как [['ABC'], ['AB']], вам нужно обернуть результирующую строку в другой список следующим образом:

>>> [[''.join(x)] for x in A]
[['ABC'], ['AB']]

## Dirty one using map (only for illustration, please use *list comprehension*)
# >>> list(map(lambda x: [''.join(x)], A))
# [['ABC'], ['AB']]

Проблема с вашим кодом: в вашем случае < strong> ''.join(A) не сработало, поскольку A является вложенным списком, но ''.join(A) пытался объединить все элементы, присутствующие в A обрабатывая их как строку . И это причина вашей ошибки «ожидаемый str экземпляр, list найден» . Вместо этого вам нужно передать каждый подсписок вашему вызову ''.join(..). Это может быть достигнуто с помощью map и понимания списка , как показано выше.

5
Moinuddin Quadri 25 Фев 2018 в 22:19

Просто

map(''.join, A)

['ABC', 'AB']
5
eagle 25 Фев 2018 в 21:45

Вы можете попробовать это:

A = [["A","B","C"],["A","B"]]
new_a = [[''.join(b)] for b in A]

Выход:

[['ABC'], ['AB']]
2
Ajax1234 25 Фев 2018 в 21:56