it-swarm.com.de

'str'-Objekt unterstützt keine Elementzuordnung in Python

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

So ist mein Code wie folgt 

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?

77

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

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 eine neue Zeichenfolge bei jeder Wiederholung und speichert den Verweis auf diese neue Zeichenfolge in srr.

62
NPE

Die anderen Antworten sind korrekt, aber Sie können natürlich etwas tun:

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

wenn du wirklich willst.

74
Paul Griffiths

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

Ich möchte einige Zeichen aus einem String lesen und in .__ einfügen. andere Zeichenfolge.

Dann verwende einen String Slice:

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

Wie bereits erwähnt - Zeichenfolgen in Python sind unveränderlich (Sie können sie an Ort und Stelle nicht ändern).

Was Sie zu tun versuchen, kann auf verschiedene Arten erfolgen:

# 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[:]
4
Burhan Khalid

Ein anderer Ansatz, wenn Sie ein bestimmtes Zeichen gegen ein anderes Zeichen 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:])