• 締切済み

pythonの文字列のインデックスについて

s='あいうえお' x=s[1:2:1] print(x) 開始インデックス1、終了インデックス2、ステップ1です。 この結果は"い”となります。あいうえお = 0 1 2 3 4 なのでs[1:..]が”い”に相当するのは分かります。s[1:2:..]の2はどういう風に解釈するのでしょうか。 簡単なはずなのですが混乱してしまいました。よろしくお願いします。

みんなの回答

  • ysumie
  • ベストアンサー率0% (0/0)
回答No.6

開始インデックス、終了インデックス、ステップを、 a,b,cと呼ぶと、 インデックスのa番目から、b-1番目までを、cステップずつ になります。 終了インデックスが、マイナス1なのが、ややこしいですよね。

すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

質問自体より既出の回答の返信内容を見ていると、 >簡単なはずなのですが と感じているのにちょっとビックリです。 正直返信内容を見ていたら 「いっそPythonの開発者にどうしてそうなるように作ったのか!」と 聞いてみる方が早いのでは?と感じましたね。 開発されている状況に応じてそれを身につけ組んでいくしか一般的な人はやるしかない と改めて感じさせられました。 どうしてもその部分を仕様として覚えるのではなく、どうしてそのような仕様になったのかを知るとしたら、答えられるのはやっぱ開発元になるのではないでしょうか?

skmsk1941093
質問者

お礼

回答ありがとうございます。プログラム言語も言語なのでなぜ、そうなるのかを問うことはできない、なぜ鉛筆をpencilというのか問うことはできない、ということと同値である、ということなのでしょうか。鎌倉幕府が1192年というのも”なぜ”はほぼ受け付けません。これらは事実を飲み込むしか仕方がありません。そういうことなのでしょうか。 しかし、機能を定式化(パターン化)することはできるのではないかと思っています。覚え方と言ってもいいのかもしれません。実験=帰納的であり(事実を飲み込む)、定式化(パターン化)=演繹的です。 s='あいうえお' x=s[i:j:k] この時に右辺を関数で表示するとどうなるのかということなのですが。実例を示すことではなく。 もし無理やり解釈するなら以下の通りです。(多分違うだろうと思いますが、関数を言葉で表示しているつもりです。こういうことを確認したいということなのですが) --- s[1:2:1]では、文字列sのインデックス1から文字列の最初からの2個目までを1つづつ示すという意味である。 s='あいうえお'に当てはめると文字列sのインデックス1は'い'であり、先頭から2個目はすなわち'い'となり、そこまで飛び0で出すのだから結局'い'のみとなる。 ということは、s[i:j:k]とは文字列sのインデックスiから文字列の個数jまでを(k-1)個飛びに取り出すということである。 ※なおインデックスはゼロから始まるが、個数は1から始まる。 ※この解釈ならi,j,kは正の整数のみでしか成立しません。負の場合は別途定義しなおす? ---

すると、全ての回答が全文表示されます。
  • qzl
  • ベストアンサー率0% (0/0)
回答No.4

もう私の回答に対して返答するの辞めてくださいね

すると、全ての回答が全文表示されます。
  • qzl
  • ベストアンサー率0% (0/0)
回答No.3

1+1が2になる理由が解りません、この証明方法を教えてくださいなんてことを今調べてたらキリがなくなります もう少し掘り下げてプログラミングを理解したいという話ならPythonより多くの関数を自力で作らなければいけないC言語とかのほうが良いと思いますけどね C言語では文字列を配列として扱うことになるのでPythonでいうところのスライスの仕組みが少しは理解できるでしょうね。

すると、全ての回答が全文表示されます。
  • qzl
  • ベストアンサー率0% (0/0)
回答No.2

お礼拝見しました あれこれ試してご自身で検証するということをまったくしないのですね

skmsk1941093
質問者

お礼

ご指摘ありがとうございます。 実際の動作の確認はとれるのですが、理解の方法がわからないという質問なのです。あれこれ試して実際にそうなっているのだからそれを丸呑みせよ、という方法もあるでしょうけれど。実際の動作確認というのであればこの質問の前にたっぷりやっており、どう理解したらよいかわからないということが質問の主旨なのですが。

すると、全ての回答が全文表示されます。
  • qzl
  • ベストアンサー率0% (0/0)
回答No.1

1から1(間隔)ずつ2番目までです x[1:4:2]とやれば"いえ"となり 1から1つ飛ばし(2間隔)で4番目までと分かりやすいと思います スライスのいろいろです、文字列と配列は同じ理屈ですので以下を参考にどうぞ #以降は出力結果です num = [40, 50, 60, 70, 80, 90] num[1:4] # [50, 60, 70] num[:2] # [40, 50] num[:-1] # [40, 50, 60, 70, 80] num[3:] # [70, 80, 90] num[-3:] # [70, 80, 90] num[::2] # [40, 60, 80] num[::-2] # [90, 70, 50] num[::-1] # [90, 80, 70, 60, 50, 40] num[-2::-1] # [80, 70, 60, 50, 40] num[0:5:2] # [40, 60, 80]

skmsk1941093
質問者

お礼

回答ありがとうございます。確認です。 x[1:4:2] は1から2間隔で4番目まで、ということなので、 x[l:m:n] はlからn間隔でm番目まで、という一般化でいいでしょうか。 文字列を配列番号0から始まる数で標記してその数をインデックスとします。 この”m番目”ですが、インデックスとしてはm-1ということになるので、 番目をなくしてインデックスで標記すると、 x[l:m:n] はインデックスlからインデックスm-1までn間隔でという理解なのですが。ただし、そうすると負のインデックスはないのでそこはどうするかという問題は残りますが。nについて負だったら逆に戻ると解釈すると。l,mが負ってどういうことなのかという疑問が残ります。どう考えるのでしょうか。

すると、全ての回答が全文表示されます。

関連するQ&A