Đối tượng 'str' không hỗ trợ gán mục trong Python


130

Tôi muốn đọc một số ký tự từ một chuỗi và đặt nó vào chuỗi khác (Giống như chúng ta làm trong C).

Vì vậy, mã của tôi như dưới đây

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)

Trong C, mã có thể là

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

Làm cách nào để triển khai tương tự trong Python?


19
Btw, đừng đặt tên biến của bạn sau nội trang python. Nếu bạn sử dụng strnhư một biến ở đây, bạn sẽ không thể thực hiện chuyển đổi chuỗi với str(var_that_is_not_a_string)hoặc nhập các so sánh như type(var_with_unknown_type) == str.
Joel Cornett

Câu trả lời:


100

Trong Python, các chuỗi là bất biến, vì vậy bạn không thể thay đổi các ký tự của chúng tại chỗ.

Tuy nhiên, bạn có thể làm như sau:

for i in str:
    srr += i

Lý do điều này hoạt động là vì nó là một phím tắt cho:

for i in str:
    srr = srr + i

Ở trên tạo một chuỗi mới với mỗi lần lặp và lưu trữ tham chiếu đến chuỗi mới đó trong srr.


Sau đó, nếu tôi muốn đọc các ký tự từ chuỗi và sao chép chúng ở đâu, thì làm thế nào tôi có thể làm điều đó?
Rasmi Ranjan Nayak

1
@RasmiRanjanNayak: Nó phụ thuộc vào những gì bạn cần làm với những ký tự đó. Trong câu trả lời của mình, tôi đã chỉ ra cách chúng có thể được nối vào một chuỗi khác.
NPE

Tôi muốn viết một chương trình "Xin chào thế giới" thành "Xin chào thế giới". Vì vậy, mã của tôi nên tìm kiếm khoảng trắng (''). Vì vậy, tôi đang tìm kiếm sự giúp đỡ
Rasmi Ranjan Nayak

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

2
@aix: Đó là nghĩa đen trong vòng vài giây của nhau. : D
Joel Cornett

113

Các câu trả lời khác đều đúng, nhưng tất nhiên, bạn có thể làm điều gì đó như:

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

nếu bạn thực sự muốn.


14

Chuỗi Python là bất biến vì vậy những gì bạn đang cố gắng thực hiện trong C sẽ đơn giản là không thể trong python. Bạn sẽ phải tạo một chuỗi mới.

Tôi muốn đọc một số ký tự từ một chuỗi và đặt nó vào chuỗi khác.

Sau đó, sử dụng một lát chuỗi:

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

5

Như aix đã đề cập - các chuỗi trong Python là bất biến (bạn không thể thay đổi chúng tại chỗ).

Những gì bạn đang cố gắng làm có thể được thực hiện theo nhiều cách:

# 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

Một cách tiếp cận khác nếu bạn muốn hoán đổi một ký tự cụ thể cho một ký tự khác:

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

Xin chào, bạn nên thử phương pháp chia chuỗi:

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

j = 'is not enough'

print 'The', output[1], j
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.