> アルゴリズムは苦手なので、ひねり無しです。
ひねりは無いけど、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って、意外にクセあるかも・・・
※無くて七癖