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/