Об'єкт 'str' не підтримує призначення елемента в Python


130

Я хотів би прочитати деякі символи з рядка і помістити його в інший рядок (як це робимо в C).

Тож мій код як нижче

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)

В C код може бути

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

Як я можу реалізувати те саме в Python?


19
До речі, не називайте змінних після вбудованих python. Якщо ви тут використовуєте strяк змінну, ви не зможете робити перетворення рядків із str(var_that_is_not_a_string)типом порівнянь або набирати їх type(var_with_unknown_type) == str.
Джоел Корнетт

Відповіді:


100

У Python рядки незмінні, тому ви не можете змінити їх символи на місці.

Однак ви можете зробити наступне:

for i in str:
    srr += i

Причини цього працюють в тому, що це ярлик для:

for i in str:
    srr = srr + i

Вищенаведене створює новий рядок з кожною ітерацією та зберігає посилання на цю нову рядок у srr.


Тоді, якщо я хотів би прочитати символів з рядка і скопіювати їх десь, то як я можу це зробити?
Расмі Ранджан Наяк

1
@RasmiRanjanNayak: Це залежить від того, що потрібно робити з цими персонажами. У своїй відповіді я показав, як вони можуть бути додані до іншого рядка.
NPE

Я хотів би написати програму "Hello world" до "World Hello". Тому мій код повинен шукати простір (''). Тому я шукав допомоги
Расмі Ранджан Наяк

5
@RasmiRanjanNayak:print " ".join(reversed("Hello world".split())).capitalize()
Джоел Корнетт

2
@aix: Це було буквально за кілька секунд один від одного. : D
Джоел Корнетт

113

Інші відповіді правильні, але ви, звичайно, можете зробити щось на кшталт:

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

якщо ти дуже хочеш.


14

Рядки Python незмінні, тому те, що ви намагаєтеся зробити в C, буде просто неможливо в python. Вам доведеться створити новий рядок.

Я хотів би прочитати деякі символи з рядка і помістити його в інший рядок.

Потім використовуйте фрагмент рядка:

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

5

Як вже було сказано в Aix - рядки в Python незмінні (ви не можете змінити їх замість).

Те, що ви намагаєтеся зробити, можна зробити багатьма способами:

# 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

Інший підхід, якщо ви хочете замінити певного символу на іншого персонажа:

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

Як щодо цього рішення:

str = "Hello World" (як зазначено в проблемі) srr = str + ""


-2

Привіт, ви повинні спробувати метод розділення рядків:

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

j = 'is not enough'

print 'The', output[1], j
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.