Permalänk
Medlem

Byta ut bokstav i Python

Jag vill göra något väldigt enkelt, nämligen byta ut en bokstav på en viss position i en sträng med en annan.

streng="moggelito" streng[2]="s"

Ger felet "TypeError: object does not support item assignment"

Hur göra? Jag blir galen, det ska ju vara så lätt... Jag har inte riktigt blivit kompis med Python än. Tycker dokumentationen e kass.

Visa signatur

CPU: Central Propulsion Unit. The CPU is the computer's engine. It consists of a hard drive, an interface card and a tiny spinning wheel that's powered by a running rodent -- a gerbil if the machine is a 286 model, a ferret if it's a 386, and a ferret on speed if it's a 486.

Permalänk
Hedersmedlem

Man får inte göra så med strängar i Python (som felmeddelandet säger ).

I det här fallet går följande:

string = 'moggelito' string = string.replace('g', 's', 1)

Kommer att byta ut g mot s en gång.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Eller om du inte vet vad för tecken utan bara vilken position kan man göra såhär:

def replace(string, pos, char): return string[:pos] + char + string[pos+1:] print replace('moggelito',2,'s')

Ger mosgelito

Permalänk
Medlem

Precis. Det blev så jag gjorde till slut. Det funkar ju inte att köra bara replace för då byts alla likadana bokstäver ut. Tyckte bara att det va skummt att man inte kunde ändra i strängar, men det är väl så. Tackar för hjälpen iaf!

Visa signatur

CPU: Central Propulsion Unit. The CPU is the computer's engine. It consists of a hard drive, an interface card and a tiny spinning wheel that's powered by a running rodent -- a gerbil if the machine is a 286 model, a ferret if it's a 386, and a ferret on speed if it's a 486.

Permalänk

Det är sällan man har behov av att göra något sådant. Jag visste inte ens att det inte gick, eftersom jag aldrig provat.

Visa signatur

Python-IRC på svenska: #python.se

Permalänk
Medlem

Det gick ju inte!

Men i C skulle det funkat och det är det jag är van vid. I det här fallet skulle jag kolla hur man kan gå från ett ord till ett annat genom att ändra en bokstav. Typ våg>håg>hög>bög

Visa signatur

CPU: Central Propulsion Unit. The CPU is the computer's engine. It consists of a hard drive, an interface card and a tiny spinning wheel that's powered by a running rodent -- a gerbil if the machine is a 286 model, a ferret if it's a 386, and a ferret on speed if it's a 486.

Permalänk
Medlem

det hade funkat i Ruby också, men det hjälper ju dessvärre inte dig:

irb(main):001:0> streng = "moggelito" => "moggelito" irb(main):002:0> streng[2] = "s" => "s" irb(main):003:0> streng => "mosgelito"

Visa signatur

The power of GNU compiles you!
"Often statistics are used as a drunken man uses lampposts -- for support rather than illumination."

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av gunne
Det gick ju inte!

Men i C skulle det funkat och det är det jag är van vid. I det här fallet skulle jag kolla hur man kan gå från ett ord till ett annat genom att ändra en bokstav. Typ våg>håg>hög>bög

Int så konstigt att det fungerar i C, C-strängar är ju arrayer vilket går utmärkt att modifiera även i Python.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Man kan ju också göra om till en lista, manipulera den, och sen ändra tillbaka

x = list("apa")
x[1] = "x"
print "".join(x)