194

s1文字列からいくつかの文字を読み取り、それを別の文字列に入れたいと思いますs2

ただし、に割り当てるとs2[j]エラーが発生します。

s2[j] = s1[i]

# TypeError: 'str' object does not support item assignment

Cでは、これは機能します:

int i = j = 0;
while (s1[i] != '\0')
    s2[j++] = s1[i++];

Pythonでの私の試み:

s1 = "Hello World"
s2 = ""
j = 0

for i in range(len(s1)):
    s2[j] = s1[i]
    j = j + 1
4

10 に答える 10

162

他の答えは正しいですが、もちろん、次のようなこともできます。

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

あなたが本当にしたい場合。

于 2013-08-01T23:44:02.923 に答える
134

Python では、文字列は不変であるため、その文字をその場で変更することはできません。

ただし、次のことはできます。

for c in s1:
    s2 += c

これが機能する理由は、次のショートカットであるためです。

for c in s1:
    s2 = s2 + c

上記は、反復ごとに新しい文字列を作成し、s2その新しい文字列への参照を に保存します。

于 2012-05-17T07:19:38.530 に答える
23

に割り当てるとs2[j]エラーが発生します

文字列は不変であるため、C で行ったことは Python では不可能です。代わりに、新しい文字列を作成する必要があります。

文字列からいくつかの文字を読み取り、それを別の文字列に入れたいと思います。

スライスを使用します:

>>> s1 = 'Hello world!!'
>>> s2 = s1[6:12]
>>> print(s2)
world!
于 2012-05-17T07:23:13.453 に答える
6

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[:]
于 2012-05-17T07:24:32.990 に答える
0

「str」は不変のデータ型です。そのため、str 型オブジェクトは項目の代入をサポートしていません。

s1 = "Hello World"
s2 = ['']*len(s1)
j = 0
for i in range(len(s1)):
s2[j]=s1[i]
j = j + 1
print(''.join(s2)) # Hello World
于 2022-01-17T09:21:41.290 に答える
0

他の回答では、文字列をリストに変換するか、文字ごとに新しい文字列を作成します。これらのメソッドは、特に大きな文字列の場合、コストがかかる可能性があります。代わりに、スライスを使用して、変更された文字の前後の文字列の部分を取得し、それらを新しい文字と組み合わせることができます。

ここでは、 Crowman の回答のサンプル コードを変更して、リストへの変換ではなく、文字列スライスを使用して文字列内の 1 文字を置き換えます。

>>> str1 = "mystring"
>>> pos = 5
>>> new_char = 'u'
>>> str2 = str1[:pos] + new_char + str1[pos+1:]
>>> print(str2)
mystrung
>>> type(str2)
<class 'str'>
于 2021-11-16T22:28:12.827 に答える
-1

こんにちは、文字列分割方法を試してみてください。

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

j = 'is not enough'

print 'The', output[1], j
于 2016-01-01T21:52:57.687 に答える