作者: 機械伯爵
日時: 2002/11/23(01:27)
>  アルゴリズムは苦手なので、ひねり無しです。

 ひねりは無いけど、Python特有の書き方してる
とこあるので、コメントだけ(初心者ブースだし・・・)

※基本的に安定版1.5.2を基本にして書いてますので、
 拡張書式はつかってません。
 
>   if type("") == type(lst):

 typeはオブジェクトタイプを返す関数。

 空白文字列を食わせて文字列型を返す常套手段
です。

※文字列型をダイレクトに取得しようとすると、
 モジュールインポートが必要なので・・・

 AWKとかだと、文字列と読んだり数値を読んだりでき
て便利なのだけど、Pythonはそこまでファジーじゃない
ので、こーゆーときは若干面倒ですね。

※簡単なフィルタなら、私もAWKを素直に使ってます。

>     lst = string.split(lst,",")

 文字列を分割する関数程度でも、組み込み関数ではなく、
モジュールインポートが必要。

 ただし、最近のモノでは、文字列オブジェクトのメソッド
として実装してありますので、

lst="1,2,3,4,5".split(",")

 ってな書き方ができます。

>   for x in range(1,len(lst)):

 Pythonのforループは他の言語のfor each(シーケンス
テスト・・・要するにリスト内容総当たりで処理を行い
ます)専用です。

 range()は、順列リストを返す関数です。

 上記の通り、forループはシーケンステスト専用なので、

for x in range(n):

 とゆーのが、n回ループの書き方のセオリーなのだけど、
nがでかいとわざわざリスト作る手間で遅くなりそうなので、
今回のように数値を利用するものでない限り、私は
whileループを使います。

 ただし、whileループでは、カウンタの初期化がwhileループ内
でできないので、ループの外でカウンタを設定するという、
ちょっとダサい書き方になります。

c = 10
while c:
  ...
  c = c-1

 len()はシーケンスの長さを返す関数。

 メソッドとして実装してあるにもかかわらず、外部関数
フックとして利用します(なんでやろ?)

 もし、メソッドとして書くなら・・・

seq.__len__()

 と、逆に長くなってしまう・・・

>       r = r + str(l[c][0])

 リストならappendメソッドによって直接リストに加える
ことができますが、Pythonの文字列型は変更不可なので、
再代入を行います。

 str()は数値型など、他の型を文字列表現にする関数。

>   return r[:-1]

 iconから導入したスライス(シーケンスの一部を取り出す書式)です。

 seq[:n]は、インデックスnより前の部分シーケンス、seq[n:]はイン
デックスn以降の部分シーケンスをとりだす書き方です。

 なお、マイナスのインデックスは、後ろから何番目、の意味です。

 ・・・こうして見ると、Pythonって、意外にクセあるかも・・・

※無くて七癖