Если у меня есть список символов:
a = ['a','b','c','d']
Как преобразовать его в одну строку?
a = 'abcd'
Если у меня есть список символов:
a = ['a','b','c','d']
Как преобразовать его в одну строку?
a = 'abcd'
Используйте метод join
пустой строки, чтобы соединить все строки вместе с пустой строкой между ними, например:
>>> a = ['a', 'b', 'c', 'd']
>>> ''.join(a)
'abcd'
Это работает во многих популярных языках, таких как 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, но не на его согласованность.
Если ваш интерпретатор 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'
.
Это может быть самый быстрый способ:
>> from array import array
>> a = ['a','b','c','d']
>> array('B', map(ord,a)).tostring()
'abcd'
Функция уменьшения также работает
import operator
h=['a','b','c','d']
reduce(operator.add, h)
'abcd'
h = ['a','b','c','d','e','f']
g = ''
for f in h:
g = g + f
>>> g
'abcdef'
используйте join
с пустым разделителем
h = ['a','b','c','d','e','f']
print ''.join(h)
или используйте reduce
с оператором add
import operator
h=['a','b','c','d']
reduce(operator.add, h)
Если список содержит числа, вы можете использовать map()
с join()
.
Например:
arr = [3, 30, 34, 5, 9]
''.join(map(str,arr))
>> 3303459
кроме 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-символьных строк очень дорог память-накрест).
Если у вас низкая память, и у вас есть лениво оцениваемый объект в качестве входных данных, этот подход является лучшим решением.
Вы также можете использовать 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()
.
g = ['a', 'b', 'c', 'd']
f=''
for i in range(0,len(g)):
f=f+g[i]
print f
str = ''
for letter in a:
str += letter
print str