Objek 'str' tidak mendukung penugasan item dengan Python


130

Saya ingin membaca beberapa karakter dari sebuah string dan memasukkannya ke string lain (Seperti yang kita lakukan di C).

Jadi kode saya seperti di bawah ini

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)

Dalam C kodenya mungkin

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

Bagaimana saya bisa menerapkan hal yang sama dengan Python?


19
Btw, jangan beri nama variabel Anda setelah python builtins. Jika Anda menggunakan strsebagai variabel di sini, Anda tidak akan dapat melakukan konversi string dengan str(var_that_is_not_a_string)atau jenis perbandingan seperti type(var_with_unknown_type) == str.
Joel Cornett

Jawaban:


100

Di Python, string tidak dapat diubah, jadi Anda tidak dapat mengubah karakternya di tempat.

Namun, Anda dapat melakukan hal berikut:

for i in str:
    srr += i

Alasan ini berhasil adalah karena ini jalan pintas untuk:

for i in str:
    srr = srr + i

Di atas membuat string baru dengan setiap iterasi, dan menyimpan referensi ke string baru tersebut di srr.


Lalu jika saya ingin membaca karakter dari string dan menyalinnya di suatu tempat, lalu bagaimana saya bisa melakukannya?
Rasmi Ranjan Nayak

1
@RasmiRanjanNayak: Itu tergantung pada apa yang perlu Anda lakukan dengan karakter tersebut. Dalam jawaban saya, saya telah menunjukkan bagaimana mereka dapat ditambahkan ke string lain.
NPE

Saya ingin menulis program "Halo Dunia" menjadi "Halo Dunia". Jadi kode saya harus mencari spasi (''). Jadi saya mencari bantuan
Rasmi Ranjan Nayak

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

2
@aix: Itu benar-benar dalam beberapa detik satu sama lain. : D
Joel Cornett

113

Jawaban lainnya benar, tetapi Anda tentu saja dapat melakukan sesuatu seperti:

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

jika Anda benar-benar menginginkannya.


14

String Python tidak dapat diubah sehingga apa yang Anda coba lakukan di C tidak mungkin dilakukan dengan python. Anda harus membuat string baru.

Saya ingin membaca beberapa karakter dari sebuah string dan memasukkannya ke string lain.

Kemudian gunakan potongan string:

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

5

Seperti yang disebutkan aix - string dalam Python tidak dapat diubah (Anda tidak dapat mengubahnya di tempat).

Apa yang Anda coba lakukan dapat dilakukan dengan banyak cara:

# 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

Pendekatan lain jika Anda ingin menukar karakter tertentu dengan karakter lain:

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

Bagaimana dengan solusi ini:

str = "Hello World" (seperti yang disebutkan dalam soal) srr = str + ""


-2

Hai, Anda harus mencoba metode pemisahan string:

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

j = 'is not enough'

print 'The', output[1], j
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.