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?

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

NPE
sumber
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.

Crowman
sumber
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!
wim
sumber
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[:]
Burhan Khalid
sumber
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:])
Jean-Emile Leconte II
sumber
0

Bagaimana dengan solusi ini:

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

pengguna2643900
sumber
-2

Hai, Anda harus mencoba metode pemisahan string:

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

j = 'is not enough'

print 'The', output[1], j
Devzzone
sumber