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?

Rasmi Ranjan Nayak
quelle
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.

NPE
quelle
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.

Crowman
quelle
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!
wim
quelle
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[:]
Burhan Khalid
quelle
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:])
Jean-Emile Leconte II
quelle
0

Wie wäre es mit dieser Lösung:

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

user2643900
quelle
-2

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

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

j = 'is not enough'

print 'The', output[1], j
Devzzone
quelle