web-dev-qa-db-fra.com

L'objet 'str' ne prend pas en charge l'attribution d'éléments en Python

J'aimerais lire quelques caractères d'une chaîne et les insérer dans une autre chaîne (comme nous le faisons en C).

Donc, mon code est comme ci-dessous 

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)

En C le code peut être

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

Comment puis-je implémenter la même chose en Python?

77

En Python, les chaînes sont immuables, vous ne pouvez donc pas changer leurs caractères sur place.

Vous pouvez cependant procéder comme suit:

for i in str:
    srr += i

Cela fonctionne parce qu’il s’agit d’un raccourci pour:

for i in str:
    srr = srr + i

Le ci-dessus crée une nouvelle chaîne à chaque itération et stocke la référence à cette nouvelle chaîne dans srr.

62
NPE

Les autres réponses sont correctes, mais vous pouvez bien sûr faire quelque chose comme:

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

si tu le veux vraiment.

74
Paul Griffiths

Les chaînes Python sont immuables, ce que vous essayez de faire en C sera tout simplement impossible en python. Vous devrez créer une nouvelle chaîne. 

Je voudrais lire quelques caractères d'une chaîne et le mettre dans autre chaîne.

Ensuite, utilisez une tranche de chaîne:

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

Comme l'aix l'a mentionné, les chaînes en Python sont immuables (vous ne pouvez pas les changer sur place).

Ce que vous essayez de faire peut être fait de plusieurs manières:

# 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

Une autre approche si vous voulez échanger un personnage spécifique contre un autre personnage:

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