回答 受付中

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

  • 困ってます
  • 質問No.9555799
  • 閲覧数52
  • ありがとう数4
  • 気になる数0
  • 回答数5

お礼率 50% (276/549)

s='あいうえお'
x=s[1:2:1]
print(x)

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

回答 (全5件)

  • 回答No.5

ベストアンサー率 33% (959/2868)

質問自体より既出の回答の返信内容を見ていると、
>簡単なはずなのですが
と感じているのにちょっとビックリです。

正直返信内容を見ていたら
「いっそPythonの開発者にどうしてそうなるように作ったのか!」と
聞いてみる方が早いのでは?と感じましたね。
開発されている状況に応じてそれを身につけ組んでいくしか一般的な人はやるしかない
と改めて感じさせられました。
どうしてもその部分を仕様として覚えるのではなく、どうしてそのような仕様になったのかを知るとしたら、答えられるのはやっぱ開発元になるのではないでしょうか?
お礼コメント
skmsk1941093

お礼率 50% (276/549)

回答ありがとうございます。プログラム言語も言語なのでなぜ、そうなるのかを問うことはできない、なぜ鉛筆を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は正の整数のみでしか成立しません。負の場合は別途定義しなおす?
---
投稿日時 - 2018-11-20 08:12:24
感謝経済
  • 回答No.4

ベストアンサー率 0% (0/0)

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

ベストアンサー率 0% (0/0)

1+1が2になる理由が解りません、この証明方法を教えてくださいなんてことを今調べてたらキリがなくなります

もう少し掘り下げてプログラミングを理解したいという話ならPythonより多くの関数を自力で作らなければいけないC言語とかのほうが良いと思いますけどね
C言語では文字列を配列として扱うことになるのでPythonでいうところのスライスの仕組みが少しは理解できるでしょうね。
  • 回答No.2

ベストアンサー率 0% (0/0)

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

お礼率 50% (276/549)

ご指摘ありがとうございます。
実際の動作の確認はとれるのですが、理解の方法がわからないという質問なのです。あれこれ試して実際にそうなっているのだからそれを丸呑みせよ、という方法もあるでしょうけれど。実際の動作確認というのであればこの質問の前にたっぷりやっており、どう理解したらよいかわからないということが質問の主旨なのですが。
投稿日時 - 2018-11-10 19:26:33
  • 回答No.1

ベストアンサー率 0% (0/0)

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

お礼率 50% (276/549)

回答ありがとうございます。確認です。
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が負ってどういうことなのかという疑問が残ります。どう考えるのでしょうか。
投稿日時 - 2018-11-08 18:25:40
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


感謝指数をマイページで確認!

ピックアップ

ページ先頭へ