作者: 王虎
日時: 2004/7/28(20:56)
Bruce. です。

TSPerlで発言した配列(リスト)の積と差について。

Pythonでいかに記述するかですが、定石どおり(?)マップ(連想配列)を
使うしかないかなと思ったのですが、Pythonには配列要素の有無を確認する
inという演算子があるので


>>> hoge1 = ["1", "1", "1", "3", "4", "5", "5"]
>>> hoge2 = ["1", "2", "4", "5"]
>>> hoge3 = [x for x in hoge1 if x in hoge2]
>>> hoge3
['1', '1', '1', '4', '5', '5']
>>> hoge4 = [x for x in hoge2 if x not in hoge1]
>>> hoge4
['2']
>>>

のように一行で書けました。リストが大きくなるとマップを使ったほうが
良いかなという気がしないでもありませんが。で、前者は重複した要素を
そのままにしているので

def uniq(l):
    if l == []:
        return []
    ret = []
    while (l != []):
        x = l[0]
        l = l[1:]
        if x not in l:
            ret.append(x)
    return ret

if __name__ == '__main__':
    print uniq(["1", "1", "1", "3", "4", "5", "5"])

なんてのを定義してみました。あ、最初のif文いらないですね(最初再帰を
使って書こうとした名残か)。それに引数を破壊してる。

-- 
木村浩一
  I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
  mail kbk@...
  web  www.kt.rim.or.jp/~kbk/