インデックスによって文字列からcharを取得する方法は?


91

x個の未知の文字で構成される文字列があるとしましょう。どうすればcharnrを取得できますか。13またはcharnr。x-14?

回答:


129

まず、必要な数が最初または最後から文字列の有効なインデックスであることを確認してから、配列の添え字表記を使用できます。len(s)文字列の長さを取得するために 使用

>>> s = "python"
>>> s[3]
'h'
>>> s[6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> s[0]
'p'
>>> s[-1]
'n'
>>> s[-6]
'p'
>>> s[-7]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> 

1
負の整数を渡すことができます
Aviram Segal 2012

@AviramSegal訂正していただきありがとうございます、はい、できますが、文字列の長さの制限内にある必要があります。
dhruvPathak 2012年

1
編集後、ベストアンサー、反対票ではなく賛成票を投じました:)
Aviram Segal 2012

1
この答えは、各インデックスで一意の文字を含む異なる単語を使用することで改善できます。現状では、s [3]はどの 'l'を返すかについてあいまいです。
新規ユーザーに親切にする

1
なぜ機能s[-5]するのにs[-6]、インデックスが範囲外のエラーで文句を言うのでしょうか?Pythonの文字列オブジェクトでの実装にとても興味があります。
アルストン2016年

5
In [1]: x = "anmxcjkwnekmjkldm!^%@(*)#_+@78935014712jksdfs"
In [2]: len(x)
Out[2]: 45

ここで、xの正のインデックス範囲は、0〜44(つまり、長さ-1)です。

In [3]: x[0]
Out[3]: 'a'
In [4]: x[45]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)

/home/<ipython console> in <module>()

IndexError: string index out of range

In [5]: x[44]
Out[5]: 's'

負のインデックスの場合、インデックスの範囲は-1から-45です。

In [6]: x[-1]
Out[6]: 's'
In [7]: x[-45]
Out[7]: 'a

負のインデックスの場合、負の[長さ-1]、つまり正のインデックスの最後の有効な値は、リストが逆の順序で読み取られるときに2番目のリスト要素を与えます。

In [8]: x[-44]
Out[8]: 'n'

その他、インデックスの例、

In [9]: x[1]
Out[9]: 'n'
In [10]: x[-9]
Out[10]: '7'

質問はあなたにとって基本的なように見えるかもしれませんが、何が起こっているのかを口頭で説明する必要があります。
ハネレ2012年

いくつかの説明で答えを更新しました、それが役立つことを願っています:)
avasal 2012年

3

以前の回答ASCII characterは、特定のインデックスでカバーしています。

Unicode characterPython2で特定のインデックスを取得するのは少し面倒です。

と例えば、s = '한국中国にっぽん'あります<type 'str'>

__getitem__、例えば、s[i]あなたが望む場所にあなたを導きません。のように吐き出します。(多くのUnicode文字は1バイトを超えていますが__getitem__、Python 2では1バイトずつインクリメントされます。)

このPython2の場合、次のようにデコードすることで問題を解決できます。

s = '한국中国にっぽん'
s = s.decode('utf-8')
for i in range(len(s)):
    print s[i]


1

リストとインデックスを理解するためのもう1つの推奨される演習:

L = ['a', 'b', 'c']
for index, item in enumerate(L):
    print index + '\n' + item

0
a
1
b
2
c 

0

これにより、ポイントがさらに明確になります。

a = int(raw_input('Enter the index'))
str1 = 'Example'
leng = len(str1)
if (a < (len-1)) and (a > (-len)):
    print str1[a]
else:
    print('Index overflow')

入力3出力m

入力-3出力p


0

これは言葉で説明するよりも明確だと思います

s = 'python'
print(len(s))
6
print(s[5])
'n'
print(s[len(s) - 1])
'n'
print(s[-1])
'n'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.