web-dev-qa-db-ja.com

文字列の一部の小文字を大文字に変更します

_index = [0, 2, 5]
s = "I am like stackoverflow-python"
for i in index:
        s = s[i].upper()
print(s)

IndexError: string index out of range
_

最初の反復で、文字列sが最初の文字、この特定の場合は大文字の「I」になることを理解しています。しかし、代わりにswapchcase()を使用して、「s =」なしでそれを実行しようとしましたが、機能しません。

基本的に、Python 3.Xを使用して、インデックス文字を大文字としてs文字列を出力しようとしています。

10
Hanan N.

Pythonでは文字列は不変であるため、新しい文字列オブジェクトを作成する必要があります。それを行う1つの方法:

indices = set([0, 7, 12, 25])
s = "i like stackoverflow and python"
print("".join(c.upper() if i in indices else c for i, c in enumerate(s)))

印刷

I like StackOverflow and Python
19
Sven Marnach

これが私の解決策です。すべての文字を反復処理するわけではありませんが、文字列をリストに変換してから文字列に戻す方が効率的かどうかはわかりません。

>>> indexes = set((0, 7, 12, 25))
>>> chars = list('i like stackoverflow and python')
>>> for i in indexes:
...     chars[i] = chars[i].upper()
... 
>>> string = ''.join(chars)
>>> string
'I like StackOverflow and Python'
4
Tyler Crompton