Das Objekt 'str' unterstützt die Elementzuweisung in Python nicht


130

Ich möchte einige Zeichen aus einer Zeichenfolge lesen und in eine andere Zeichenfolge einfügen (wie wir es in C tun).

Mein Code ist also wie unten

import string
import re
str = "Hello World"
j = 0
srr = ""
for i in str:
    srr[j] = i #'str' object does not support item assignment 
    j = j + 1
print (srr)

In C kann der Code sein

i = j = 0; 
while(str[i] != '\0')
{
srr[j++] = str [i++];
}

Wie kann ich dasselbe in Python implementieren?


18
Übrigens, benennen Sie Ihre Variablen nicht nach Python-Builds. Wenn Sie hier strals Variable verwenden, können Sie keine Zeichenfolgenkonvertierungen mit str(var_that_is_not_a_string)oder Typvergleiche wie z type(var_with_unknown_type) == str.
Joel Cornett

Antworten:


100

In Python sind Zeichenfolgen unveränderlich, sodass Sie ihre Zeichen nicht direkt ändern können.

Sie können jedoch Folgendes tun:

for i in str:
    srr += i

Der Grund dafür ist, dass es eine Abkürzung für:

for i in str:
    srr = srr + i

Das Obige erstellt mit jeder Iteration eine neue Zeichenfolge und speichert den Verweis auf diese neue Zeichenfolge in srr.


Wenn ich dann die Zeichen aus der Zeichenfolge lesen und sie wo kopieren möchte, wie kann ich das dann tun?
Rasmi Ranjan Nayak

1
@RasmiRanjanNayak: Es hängt davon ab, was Sie mit diesen Charakteren tun müssen. In meiner Antwort habe ich gezeigt, wie sie an eine andere Zeichenfolge angehängt werden können.
NPE

Ich möchte ein Programm "Hallo Welt" zu "Welt Hallo" schreiben. Mein Code sollte also nach Leerzeichen suchen (''). Also suchte ich Hilfe
Rasmi Ranjan Nayak

5
@RasmiRanjanNayak:print " ".join(reversed("Hello world".split())).capitalize()
Joel Cornett

2
@aix: Das war buchstäblich innerhalb weniger Sekunden voneinander. : D
Joel Cornett

113

Die anderen Antworten sind richtig, aber Sie können natürlich Folgendes tun:

>>> str1 = "mystring"
>>> list1 = list(str1)
>>> list1[5] = 'u'
>>> str1 = ''.join(list1)
>>> print(str1)
mystrung
>>> type(str1)
<type 'str'>

wenn du wirklich willst.


14

Python-Strings sind unveränderlich, sodass das, was Sie in C versuchen, in Python einfach unmöglich ist. Sie müssen eine neue Zeichenfolge erstellen.

Ich möchte einige Zeichen aus einer Zeichenfolge lesen und in eine andere Zeichenfolge einfügen.

Verwenden Sie dann ein String-Slice:

>>> s1 = 'Hello world!!'
>>> s2 = s1[6:12]
>>> print s2
world!

5

Wie bereits erwähnt, sind Zeichenfolgen in Python unveränderlich (Sie können sie nicht direkt ändern).

Was Sie versuchen zu tun, kann auf viele Arten getan werden:

# Copy the string

foo = 'Hello'
bar = foo

# Create a new string by joining all characters of the old string

new_string = ''.join(c for c in oldstring)

# Slice and copy
new_string = oldstring[:]

1

Ein anderer Ansatz, wenn Sie einen bestimmten Charakter gegen einen anderen Charakter austauschen möchten:

def swap(input_string):
   if len(input_string) == 0:
     return input_string
   if input_string[0] == "x":
     return "y" + swap(input_string[1:])
   else:
     return input_string[0] + swap(input_string[1:])

0

Wie wäre es mit dieser Lösung:

str = "Hallo Welt" (wie im Problem angegeben) srr = str + ""


-2

Hallo, Sie sollten die String-Split-Methode ausprobieren:

i = "Hello world"
output = i.split()

j = 'is not enough'

print 'The', output[1], j
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.