'str' nesnesi Python'da öğe atamasını desteklemiyor


130

Bir dizeden bazı karakterleri okumak ve onu başka bir dizeye koymak istiyorum (C'de yaptığımız gibi).

Yani kodum aşağıdaki gibi

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'de kod olabilir

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

Aynısını Python'da nasıl uygulayabilirim?


19
Btw, değişkenlerinizi python yerleşiklerinden sonra adlandırmayın. strBurada değişken olarak kullanırsanız , ile dize dönüşümü yapamaz str(var_that_is_not_a_string)veya gibi karşılaştırmalar yazamazsınız type(var_with_unknown_type) == str.
Joel Cornett

Yanıtlar:


100

Python'da dizeler değişmezdir, bu nedenle karakterlerini yerinde değiştiremezsiniz.

Bununla birlikte, aşağıdakileri yapabilirsiniz:

for i in str:
    srr += i

Bunun işe yaramasının nedenleri, aşağıdakiler için bir kısayol olmasıdır:

for i in str:
    srr = srr + i

Yukarıdakiler , her yinelemede yeni bir dize oluşturur ve bu yeni dizeye referansı içinde depolar srr.


O zaman karakterleri dizeden okuyup bir yere kopyalarsam, bunu nasıl yapabilirim?
Rasmi Ranjan Nayak

1
@RasmiRanjanNayak: Bu karakterlerle ne yapmanız gerektiğine bağlı. Cevabımda başka bir dizeye nasıl eklenebileceklerini gösterdim.
NPE

"Dünya Merhaba" için bir "Merhaba dünya" programı yazmak istiyorum. Bu yüzden kodum boşluk ('') aramalı. Bu yüzden yardım arıyordum
Rasmi Ranjan Nayak

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

2
@aix: Kelimenin tam anlamıyla birkaç saniye arayla oldu. : D
Joel Cornett

113

Diğer cevaplar doğru, ancak elbette şöyle bir şey yapabilirsiniz:

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

eğer gerçekten istiyorsan.


14

Python dizeleri değişmezdir, bu nedenle C'de yapmaya çalıştığınız şey python'da imkansız olacaktır. Yeni bir dize oluşturmanız gerekecek.

Bir dizeden bazı karakterleri okumak ve onu başka bir dizeye koymak istiyorum.

Ardından bir dize dilimi kullanın:

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

5

Aix'in bahsettiği gibi - Python'daki dizeler değişmezdir (bunları yerinde değiştiremezsiniz).

Yapmaya çalıştığınız şey birçok şekilde yapılabilir:

# 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

Belirli bir karakteri başka bir karakterle değiştirmek isterseniz başka bir yaklaşım:

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

Bu çözüme ne dersiniz:

str = "Merhaba Dünya" (problemde belirtildiği gibi) srr = str + ""


-2

Merhaba, dize bölme yöntemini denemelisiniz:

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

j = 'is not enough'

print 'The', output[1], j
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.