L'objet 'str' ne prend pas en charge l'affectation d'élément en Python


130

Je voudrais lire certains caractères d'une chaîne et les mettre 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?


19
Btw, ne nommez pas vos variables d'après les fonctions intégrées de python. Si vous utilisez strici comme variable, vous ne pourrez pas effectuer de conversions de chaînes avec str(var_that_is_not_a_string)ou taper des comparaisons telles que type(var_with_unknown_type) == str.
Joel Cornett

Réponses:


100

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

Vous pouvez cependant effectuer les opérations suivantes:

for i in str:
    srr += i

La raison pour laquelle cela fonctionne est qu'il s'agit d'un raccourci pour:

for i in str:
    srr = srr + i

Ce qui précède crée une nouvelle chaîne à chaque itération et stocke la référence à cette nouvelle chaîne dans srr.


Ensuite, si je devais lire les caractères de la chaîne et les copier quelque part, comment puis-je faire cela?
Rasmi Ranjan Nayak

1
@RasmiRanjanNayak: Cela dépend de ce que vous devez faire avec ces personnages. Dans ma réponse, j'ai montré comment ils peuvent être ajoutés à une autre chaîne.
NPE

Je voudrais écrire un programme "Hello world" à "World Hello". Mon code devrait donc rechercher un espace (''). Alors je cherchais de l'aide
Rasmi Ranjan Nayak

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

2
@aix: C'était littéralement à quelques secondes d'intervalle. : D
Joel Cornett

113

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 vous voulez vraiment.


14

Les chaînes Python sont immuables, donc 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 certains caractères d'une chaîne et les mettre dans une autre chaîne.

Ensuite, utilisez une tranche de chaîne:

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

5

Comme aix l'a mentionné - les chaînes en Python sont immuables (vous ne pouvez pas les changer en 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[:]

1

Une autre approche si vous vouliez é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

Et cette solution:

str = "Hello World" (comme indiqué dans le problème) srr = str + ""


-2

Salut, vous devriez essayer la méthode de fractionnement de chaîne:

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

j = 'is not enough'

print 'The', output[1], j
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.