วัตถุ '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
Btw อย่าตั้งชื่อตัวแปรของคุณหลัง python builtins ถ้าคุณใช้strเป็นตัวแปรที่นี่คุณจะไม่สามารถที่จะทำแปลงสตริงด้วยหรือพิมพ์เช่นเปรียบเทียบเช่นเดียวกันกับstr(var_that_is_not_a_string) type(var_with_unknown_type) == str
Joel Cornett

คำตอบ:


100

ใน Python สตริงไม่เปลี่ยนรูปดังนั้นคุณจึงไม่สามารถเปลี่ยนตัวอักษรแทนได้

อย่างไรก็ตามคุณสามารถดำเนินการดังต่อไปนี้:

for i in str:
    srr += i

สาเหตุที่ได้ผลคือเป็นทางลัดสำหรับ:

for i in str:
    srr = srr + i

ดังกล่าวข้างต้นจะสร้างสตริงใหม่srrด้วยซ้ำกันและร้านค้าอ้างอิงถึงที่สตริงใหม่


แล้วถ้าฉันจะอ่านอักขระจากสตริงและคัดลอกบางส่วนจากที่ใดฉันจะทำอย่างไร
Rasmi Ranjan Nayak

1
@RasmiRanjanNayak: มันขึ้นอยู่กับว่าคุณต้องทำอะไรกับตัวละครเหล่านั้น ในคำตอบของฉันฉันได้แสดงให้เห็นว่าสามารถต่อท้ายสตริงอื่นได้อย่างไร
NPE

ฉันต้องการเขียนโปรแกรม "Hello world" เป็น "World Hello" ดังนั้นรหัสของฉันควรค้นหาช่องว่าง ('') ดังนั้นฉันจึงต้องการความช่วยเหลือ
Rasmi Ranjan Nayak

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

2
@aix: นั่นคือความจริงภายในไม่กี่วินาทีจากกัน : D
Joel Cornett

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:])


-2

สวัสดีคุณควรลองใช้วิธีแยกสตริง:

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

j = 'is not enough'

print 'The', output[1], j
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.