Python 学習:find と index

2014-04-19 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
3、2、1、1、1、 1、0、0、1、0(40)で、換算ポイント 60pt 。
「グルコサミン」昨日朝方3位にアップ。だが今朝方4位にダウン。
「FM COCOL」今朝方4位にアップ。
「Firefox」今朝方6位にダウン。
・-・ - -・

さて、本文。

更なる“Python 学習”。


文字列内に、ある文字列が含まれるかのチェック。存在する場合の位置は?
と云うことを調べる為には、
Perl では「index関数
ですね。
  「index」関数は対象となる文字列の中に部分文字列が含まれるか検索し、
  最初の位置を返します。
  ・・・・・
  index( STR, SUBSTR [, POSITION] )
  ・・・・・
  1番目の引数には対象となる文字列を指定します。
  2番目の引数には検索する部分文字列を指定します。
  3番目の引数には検索を開始する位置を指定します。
  省略した場合は先頭の文字となる「0」が指定されたものとして扱われます。

  部分文字列が見つかった場合にはその位置を返します。
  見つからなかった場合は -1 が返されます。


では、


Python では?

Python 2.7ja1 documentation」の
Python 標準ライブラリ」の
5. 組み込み型
の、
5.6.1 文字列メソッド
にある。

  str.find( sub [, start [, end] ] )
  文字列のスライス s[start, end] に sub が含まれる場合、
  その最小のインデクスを返します。
  オプション引数 start および end はスライス表記と同様に解釈されます。
  sub が見つからなかった場合 -1 を返します。

  str.index( sub [, start [, end] ] )
  find() と同様ですが、
  sub が見つからなかった場合 ValueError を送出します。

ですね。


こんなブログもある。
文字列の操作 - ひきメモ

  文字列の中に○○が含まれるかを調べる

  s = "python is python"

  >>> s.find("python")    # 前から調べる
  0

  >>> s.index("python")    # find( )と同じ
  0

  s.index("python", 3, 10)   # 見つからなければ例外


そうだったら、例外( ValueError ) 発生だと面倒なので、
<紙>的には、“find”ひとつで十分なのでは???


こんな「Q&A」を見つけた。
Why use index() instead of find() ? - Udacity Forums
正に、<紙>と同じ疑問(?)
  My question is simple, prior to that
   I understand list comprehension and have
   read some of the library the instructor told.
  So why we should use index() while find() can do as well?
   is it because find() didn't return error when the lookup is absent?
---
  私の質問は簡単前に、私はリスト包含を理解し、
   インストラクターと語ったライブラリのいくつかを読んだことがあることです。
  だからなぜ我々 find() ながら index() を使用する必要がありますもが
   できますか? find() の参照が存在しない場合エラーが返されません
   でしたので、それをあるか。
???

で、回答( 8 )では、
  find is defined on string objects.
   index is defined on list objects
  Since a string is also iterable,
   you can also use index on string objects,
   but the opposite is not true.

  >>> [1,2,3,4,5].index(4)
  3

  >>> [1,2,3,4,5].find(4)
  AttributeError: 'list' object has no attribute 'find'

つまり、
  find は、string オブジェクトに対するもので、
  index は、list オブジェクトに対するもの。
  なお、string ブジェクトは、iterable なので、
  index は、string オブジェクトに対しても適用できる。
  しかし、その逆は不可である。
  ・・・ その例示 ・・・

納得かな?


序でに、・・・

上記マニュアルの
5.6. シーケンス型 - str, unicode, list, tuple, bytearray, buffer, xrange
に、

  ・・・・・

  x in s  s のある要素が x と等しい場合 True ,
        そうでない場合 False        ・・・ 注釈 ( 1 )

  注釈:
  1.s が文字列または Unicode 文字列の場合、
  演算操作 in および not in は部分文字列の一致テストと同じように動作します。
  バージョン 2.3 以前の Python では、 x は長さ 1 の文字列でした。
  Python 2.3 以降では、 x はどの長さでもかまいません。

  ・・・・・

なる記述があった。


“in”と云うのも使えるナ。使ってみよう。


まだまだ、Python の学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


140417
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク