Hoe converteer je een string met door komma’s gescheiden items naar een lijst in Python?

Hoe converteer je een string naar een lijst?

Stel dat de tekenreeks is als text = "a,b,c". Na de conversie, text == ['a', 'b', 'c']en hopelijk text[0] == 'a', text[1] == 'b'?


Antwoord 1, autoriteit 100%

Zoals dit:

>>> text = 'a,b,c'
>>> text = text.split(',')
>>> text
[ 'a', 'b', 'c' ]

U kunt ook eval()gebruiken als u erop vertrouwt dat de tekenreeks veilig is:

>>> text = 'a,b,c'
>>> text = eval('[' + text + ']')

Antwoord 2, autoriteit 77%

Om de bestaande antwoorden aan te vullen: hopelijk zul je in de toekomst meer van dit soort dingen tegenkomen:

>>> word = 'abc'
>>> L = list(word)
>>> L
['a', 'b', 'c']
>>> ''.join(L)
'abc'

Maar waar je op dit momentmee te maken hebt, ga met @Cameron‘s antwoord.

>>> word = 'a,b,c'
>>> L = word.split(',')
>>> L
['a', 'b', 'c']
>>> ','.join(L)
'a,b,c'

Antwoord 3, autoriteit 20%

De volgende Python-code verandert je string in een lijst met strings:

import ast
teststr = "['aaa','bbb','ccc']"
testarray = ast.literal_eval(teststr)

Antwoord 4, autoriteit 11%

Ik denk niet dat je nodighebt om

In python hoef je zelden een string naar een lijst te converteren, omdat strings en lijsten erg op elkaar lijken

Het type wijzigen

Als je echt een tekenreeks hebt die een tekenreeks zou moeten zijn, doe dit dan:

In [1]: x = "foobar"
In [2]: list(x)
Out[2]: ['f', 'o', 'o', 'b', 'a', 'r']

Het type niet wijzigen

Merk op dat Strings erg lijken op lijsten in python

Strings hebben accessors, zoals lijsten

In [3]: x[0]
Out[3]: 'f'

Strings zijn itereerbaar, zoals lijsten

In [4]: for i in range(len(x)):
...:     print x[i]
...:     
f
o
o
b
a
r

TLDR

Tekenreeksen zijn lijsten. Bijna.


Antwoord 5, autoriteit 3%

Als u wilt splitsen op spaties, kunt u gewoon .split()gebruiken:

a = 'mary had a little lamb'
z = a.split()
print z

Uitvoer:

['mary', 'had', 'a', 'little', 'lamb'] 

Antwoord 6, autoriteit 3%

Als je echt arrays wilt:

>>> from array import array
>>> text = "a,b,c"
>>> text = text.replace(',', '')
>>> myarray = array('c', text)
>>> myarray
array('c', 'abc')
>>> myarray[0]
'a'
>>> myarray[1]
'b'

Als je geen arrays nodig hebt en alleen op index naar je karakters wilt kijken, onthoud dan dat een string een itereerbaar is, net als een lijst, behalve dat het onveranderlijk is:

>>> text = "a,b,c"
>>> text = text.replace(',', '')
>>> text[0]
'a'

Antwoord 7, autoriteit 2%

m = '[[1,2,3],[4,5,6],[7,8,9]]'
m= eval(m.split()[0])
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Antwoord 8, autoriteit 2%

Alle antwoorden zijn goed, er is een andere manier van doen, namelijk lijstbegrip, zie de oplossing hieronder.

u = "UUUDDD"
lst = [x for x in u]

voor door komma’s gescheiden lijst doe het volgende

u = "U,U,U,D,D,D"
lst = [x for x in u.split(',')]

Antwoord 9

Ik gebruik meestal:

l = [ word.strip() for word in text.split(',') ]

de stripverwijdert spaties rond woorden.


Antwoord 10

Om een stringte converteren met de vorm a="[[1, 3], [2, -6]]"heb ik nog geen geoptimaliseerde code geschreven:

matrixAr = []
mystring = "[[1, 3], [2, -4], [19, -15]]"
b=mystring.replace("[[","").replace("]]","") # to remove head [[ and tail ]]
for line in b.split('], ['):
    row =list(map(int,line.split(','))) #map = to convert the number from string (some has also space ) to integer
    matrixAr.append(row)
print matrixAr

Antwoord 11

# to strip `,` and `.` from a string ->
>>> 'a,b,c.'.translate(None, ',.')
'abc'

Je moet de ingebouwde translate-methode gebruiken voor strings.

Typ help('abc'.translate)in de Python-shell voor meer info.


Antwoord 12

Functionele Python gebruiken:

text=filter(lambda x:x!=',',map(str,text))

Antwoord 13

Voorbeeld 1

>>> email= "[email protected]"
>>> email.split()
#OUTPUT
["[email protected]"]

Voorbeeld 2

>>> email= "[email protected], [email protected]"
>>> email.split(',')
#OUTPUT
["[email protected]", "[email protected]"]

Antwoord 14

split()is je vriend hier. Ik zal een paar aspecten van split()behandelen die niet worden behandeld door andere antwoorden.

  • Als er geen argumenten worden doorgegeven aan split(), wordt de tekenreeks gesplitst op basis van witruimtetekens (spatie, tab en nieuwe regel). Voorloop- en volgspaties worden genegeerd. Ook worden opeenvolgende witruimten behandeld als een enkel scheidingsteken.

Voorbeeld:

>>> "   \t\t\none  two    three\t\t\tfour\nfive\n\n".split()
['one', 'two', 'three', 'four', 'five']
  • Als een scheidingsteken van één teken wordt doorgegeven, gedraagt split()zich heel anders dan het standaardgedrag. In dit geval worden voorloop/achtervolging scheidingstekens niet genegeerd, en herhalende scheidingstekens worden ook niet “samengevoegd” tot één.

Voorbeeld:

>>> ",,one,two,three,,\n four\tfive".split(',')
['', '', 'one', 'two', 'three', '', '\n four\tfive']

Dus, als het verwijderen van witruimten gewenst is tijdens het splitsen van een tekenreeks op basis van een scheidingsteken dat geen witruimte is, gebruik dan deze constructie:

words = [item.strip() for item in string.split(',')]
  • Als een tekenreeks van meerdere tekens als scheidingsteken wordt doorgegeven, wordt deze als een enkel scheidingsteken beschouwd en niet als een tekenklasse of een reeks scheidingstekens.

Voorbeeld:

>>> "one,two,three,,four".split(',,')
['one,two,three', 'four']

Om meerdere scheidingstekens samen te voegen tot één, moet u de re.split(regex, string)-aanpak gebruiken. Zie de gerelateerde berichten hieronder.


Verwant

Other episodes