Преобразование списка символов в строку

Если у меня есть список символов:

a = ['a','b','c','d']

Как преобразовать его в одну строку?

a = 'abcd'

Ответ 1

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

>>> a = ['a', 'b', 'c', 'd']
>>> ''.join(a)
'abcd'

Ответ 2

Это работает во многих популярных языках, таких как JavaScript и Ruby, почему не в Python?

>>> ['a', 'b', 'c'].join('')
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'join'

Как ни странно, в Python метод join находится в классе str:

# this is the Python way
"".join(['a','b','c','d'])

Почему join не является методом в объекте list, как в JavaScript или других популярных языках сценариев? Это один из примеров того, как думает сообщество Python. Поскольку join возвращает строку, ее следует поместить в класс string, а не в класс list, поэтому метод str.join(list) означает: объединить список в новую строку, используя str в качестве разделителя (в данном случае str - пустая строка).

Как-то я полюбил этот образ мышления через некоторое время. Я могу жаловаться на многое в дизайне Python, но не на его согласованность.

Ответ 3

Если ваш интерпретатор Python является старым (например, например, 1.5.2, который распространен в некоторых старых дистрибутивах Linux), у вас может не быть join() доступным как метод для любого старого строкового объекта, и вам придется используйте строковый модуль. Пример:

a = ['a', 'b', 'c', 'd']

try:
    b = ''.join(a)

except AttributeError:
    import string
    b = string.join(a, '')

Строка b будет 'abcd'.

Ответ 4

Это может быть самый быстрый способ:

>> from array import array
>> a = ['a','b','c','d']
>> array('B', map(ord,a)).tostring()
'abcd'

Ответ 5

Функция уменьшения также работает

import operator
h=['a','b','c','d']
reduce(operator.add, h)
'abcd'

Ответ 6

h = ['a','b','c','d','e','f']
g = ''
for f in h:
    g = g + f

>>> g
'abcdef'

Ответ 7

используйте join с пустым разделителем

h = ['a','b','c','d','e','f']
print ''.join(h)

или используйте reduce с оператором add

import operator
h=['a','b','c','d']
reduce(operator.add, h)

Ответ 8

Если список содержит числа, вы можете использовать map() с join().

Например:

    arr = [3, 30, 34, 5, 9]
    ''.join(map(str,arr))

>> 3303459

Ответ 9

кроме str.join который является наиболее естественным способом, существует возможность использовать io.StringIO и злоупотреблять writelines для записи всех элементов за один раз:

import io

a = ['a','b','c','d']

out = io.StringIO()
out.writelines(a)
print(out.getvalue())

печатает:

abcd

При использовании этого подхода с функцией генератора или итерабельностью, которая не является tuple или list, она сохраняет временное создание списка, которое делает join, чтобы выделить правильный размер за один раз (и список из 1-символьных строк очень дорог память-накрест).

Если у вас низкая память, и у вас есть лениво оцениваемый объект в качестве входных данных, этот подход является лучшим решением.

Ответ 10

Вы также можете использовать operator.concat() следующим образом:

>>> from operator import concat
>>> a = ['a', 'b', 'c', 'd']
>>> reduce(concat, a)
'abcd'

Если вы используете Python 3, вам необходимо добавить:

>>> from functools import reduce

поскольку встроенный reduce() был удален из Python 3 и теперь живет в functools.reduce().

Ответ 11

g = ['a', 'b', 'c', 'd']
f=''
for i in range(0,len(g)):
    f=f+g[i]
print f

Ответ 12

    str = ''
    for letter in a:
        str += letter
    print str