Hoe een tekenreeks in een reeks tekens in Python te splitsen?

Ik heb geprobeerd om rond te kijken naar het web voor antwoorden op het splitsen van een tekenreeks in een reeks personages, maar ik kan geen eenvoudige methode vinden

str.split(//)lijkt niet te werken zoals Ruby doet. Is er een eenvoudige manier om dit te doen zonder te lussen?


Antwoord 1, Autoriteit 100%

>>> s = "foobar"
>>> list(s)
['f', 'o', 'o', 'b', 'a', 'r']

U hebt lijst


Antwoord 2, Autoriteit 9%

U neemt de tekenreeks en geef deze door ()

s = "mystring"
l = list(s)
print l

Antwoord 3, Autoriteit 7%

U kunt het ook op deze zeer eenvoudige manier doen zonder lijst ():

>>> [c for c in "foobar"]
['f', 'o', 'o', 'b', 'a', 'r']

Antwoord 4, Autoriteit 5%

Als u uw snaar één teken per keer wilt verwerken. Je hebt verschillende opties.

uhello = u'Hello\u0020World'

Gebruik List Gevuld:

print([x for x in uhello])

Uitgang:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

Kaart gebruiken:

print(list(map(lambda c2: c2, uhello)))

Uitvoer:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

Bellen Ingebouwde lijstfunctie:

print(list(uhello))

Uitvoer:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

For-lus gebruiken:

for c in uhello:
    print(c)

Uitvoer:

H
e
l
l
o
W
o
r
l
d

Antwoord 5, autoriteit 2%

Als je alleen een reeks tekens nodig hebt:

arr = list(str)

Als je de str wilt splitsen door een bepaald scheidingsteken:

# str = "temp//temps" will will be ['temp', 'temps']
arr = str.split("//")

Antwoord 6, autoriteit 2%

Ik heb nog twee manieren onderzocht om deze taak te volbrengen. Het kan nuttig zijn voor iemand.

De eerste is eenvoudig:

In [25]: a = []
In [26]: s = 'foobar'
In [27]: a += s
In [28]: a
Out[28]: ['f', 'o', 'o', 'b', 'a', 'r']

En de tweede gebruikt mapen lambda-functie. Het kan geschikt zijn voor complexere taken:

In [36]: s = 'foobar12'
In [37]: a = map(lambda c: c, s)
In [38]: a
Out[38]: ['f', 'o', 'o', 'b', 'a', 'r', '1', '2']

Bijvoorbeeld

# isdigit, isspace or another facilities such as regexp may be used
In [40]: a = map(lambda c: c if c.isalpha() else '', s)
In [41]: a
Out[41]: ['f', 'o', 'o', 'b', 'a', 'r', '', '']

Zie python-documentenvoor meer methoden


Antwoord 7, autoriteit 2%

De taak komt neer op het herhalen van tekens van de tekenreeks en het verzamelen ervan in een lijst. De meest naïeve oplossing zou eruitzien als

result = []
for character in string:
    result.append(character)

Natuurlijk kan het worden ingekort tot slechts

result = [character for character in string]

maar er zijn nog steeds kortere oplossingen die hetzelfde doen.

listkan worden gebruikt om alle iterable(iterators , lijsten, tupels, string etc.) naar lijst.

>>> list('abc')
['a', 'b', 'c']

Het grote pluspunt is dat het hetzelfde werkt in zowel Python 2 als Python 3.

Ook vanaf Python 3.5 (dankzij de geweldige PEP 448) is het nu mogelijk om een lijst op te bouwen van elke iterable door deze uit te pakken naar een lege letterlijke lijst:

>>> [*'abc']
['a', 'b', 'c']

Dit is netter en in sommige gevallen efficiënter dan het rechtstreeks aanroepen van de list-constructor.

Ik raad af om map-gebaseerde benaderingen te gebruiken, omdat mapgeeneen lijst retourneert in Python 3. Zie Filteren, in kaart brengen en verkleinen in Python 3.


Antwoord 8, autoriteit 2%

split()ingebouwde functie zal de waarde alleen scheiden op basis van een bepaalde voorwaarde, maar in het enkele woord kan het niet aan de voorwaarde voldoen. Het kan dus worden opgelost met behulp van list(). Het roept intern de array aan en slaat de waarde op op basis van een array.

Stel,

a = "bottle"
a.split() // will only return the word but not split the every single char.
a = "bottle"
list(a) // will separate ['b','o','t','t','l','e']

Antwoord 9

Pak ze uit:

word = "Paralelepipedo"
print([*word])

Antwoord 10

Je kunt de extendmethode ook gebruiken in lijstbewerkingen.

>>> list1 = []
>>> list1.extend('somestring')
>>> list1
['s', 'o', 'm', 'e', 's', 't', 'r', 'i', 'n', 'g']

Antwoord 11

Om een string ste splitsen, is de gemakkelijkste manier om deze door te geven aan list(). Dus,

s = 'abc'
s_l = list(s) #  s_l is now ['a', 'b', 'c']

Je kunt ook een lijstbegrip gebruiken, dat werkt, maar is niet zo beknopt als het bovenstaande:

s_l = [c for c in s]

Er zijn ook andere manieren, maar deze zouden voldoende moeten zijn.
Als je ze later opnieuw wilt combineren, zal een simpele oproep naar "".join(s_l)je lijst in al zijn oude glorie herstellen als een string…


Antwoord 12

Als u alleen-lezen toegang tot de string wilt, kunt u rechtstreeks de array-notatie gebruiken.

Python 2.7.6 (default, Mar 22 2014, 22:59:38) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> t = 'my string'
>>> t[1]
'y'

Kan handig zijn om te testen zonder regexp te gebruiken.
Bevat de string een eindigende nieuwe regel?

>>> t[-1] == '\n'
False
>>> t = 'my string\n'
>>> t[-1] == '\n'
True

Antwoord 13

Hoewel ik de lijst(en)-versie ook leuk vind, hier is nog een meer uitgebreide manier die ik heb gevonden (maar het is cool, dus ik dacht dat ik het aan de strijd zou toevoegen):

>>> text = "My hovercraft is full of eels"
>>> [text[i] for i in range(len(text))]
['M', 'y', ' ', 'h', 'o', 'v', 'e', 'r', 'c', 'r', 'a', 'f', 't', ' ', 'i', 's', ' ', 'f', 'u', 'l', 'l', ' ', 'o', 'f', ' ', 'e', 'e', 'l', 's']

Antwoord 14

from itertools import chain
string = 'your string'
chain(string)

vergelijkbaar met list(string)maar retourneert een generator die lui wordt geëvalueerd op het moment van gebruik, dus geheugenefficiënt.

Other episodes