'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
ところで、Pythonビルトインにちなんで変数に名前を付けないでください。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、2012年

「World Hello」に「Hello world」というプログラムを書いてみたいです。したがって、私のコードはスペース( '')を検索する必要があります。だから私は助けを探していました
Rasmi Ranjan Nayak

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

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

0

このソリューションはどうですか:

str = "Hello World"(問題で述べたとおり)srr = str + ""


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