wake-up-neo.com

Konvertieren Sie eine Liste von Zeichen in eine Zeichenfolge

Wenn ich eine Liste von Zeichen habe:

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

Wie kann ich es in eine einzelne Zeichenfolge konvertieren?

a = 'abcd'
368
nos

Verwenden Sie die join-Methode des leeren Strings, um alle Strings mit dem leeren String dazwischen zu verknüpfen:

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

Dies funktioniert in JavaScript oder Ruby, warum nicht in Python?

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

In Python befindet sich die join-Methode in der str-Klasse:

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

Es ist ein bisschen komisch, nicht wahr? Warum ist join keine Methode im list-Objekt wie in JavaScript oder anderen gängigen Skriptsprachen? Dies ist ein Beispiel dafür, wie die Python-Community denkt. Da join einen String zurückgibt, sollte er in der String-Klasse und nicht in der Listenklasse platziert werden. Die str.join(list)-Methode bedeutet: die Liste mit einem neuen String mit str als Trennzeichen verbinden (in diesem Fall ist str ein leerer String) . 

Irgendwie musste ich diese Denkweise nach einer Weile lieben. Ich kann mich über viele Dinge im Python-Design beschweren, aber nicht über dessen Kohärenz.

33
Paulo Scardine

Wenn Ihr Python-Interpreter alt ist (z. B. 1.5.2, was bei einigen älteren Linux-Distributionen üblich ist), steht join() möglicherweise nicht für jedes alte String-Objekt als Methode zur Verfügung. Beispiel:

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

try:
    b = ''.join(a)

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

Die Zeichenfolge b lautet 'abcd'.

15
Kyle

Dies kann der schnellste Weg sein:

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

Die Reduzierfunktion funktioniert auch

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

verwenden Sie join mit leerem Trennzeichen

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

oder verwenden Sie reduce mit dem Operator add

import operator
h=['a','b','c','d']
reduce(operator.add, h)
3
octoback
h = ['a','b','c','d','e','f']
g = ''
for f in h:
    g = g + f

>>> g
'abcdef'
3
Bill

Wenn die Liste Nummern enthält, können Sie map() mit join() verwenden.

Z.B:

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

>> 3303459
2
yask

Sie könnten auch operator.concat() wie folgt verwenden:

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

Wenn Sie Python 3 verwenden, müssen Sie Folgendes voranstellen:

>>> from functools import reduce

da reduce() von Built-in aus Python 3 entfernt wurde und jetzt in functools.reduce() lebt. 

0
Tonechas

neben str.join ist dies die natürlichste Möglichkeit, io.StringIO zu verwenden und writelines zu missbrauchen, um alle Elemente auf einmal zu schreiben:

import io

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

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

druckt:

abcd

Bei Verwendung dieses Ansatzes mit einer Generatorfunktion oder einer Iteration, bei der es sich nicht um eine Tuple oder eine list handelt, wird die Erstellung temporärer Listen eingespart, die join die richtige Größe auf einmal zuweist (und eine Liste von 1-Zeichen-Strings ist sehr teuer speichermäßig).

Wenn Sie wenig Speicher haben und ein Objekt mit langsamer Auswertung als Eingabe verwenden, ist dieser Ansatz die beste Lösung.