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?

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

NPE
la source
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.

Crowman
la source
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!
wim
la source
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[:]
Burhan Khalid
la source
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:])
Jean-Émile Leconte II
la source
0

Et cette solution:

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

user2643900
la source
-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
Devzzone
la source