2

私のプロジェクトではこれだけの時間が必要だったので、ここにいる誰かが私にエレガントな書き方を教えてくれることを願っています。

文字列のリストがあり、キー/キーのような機能を使用して重複を除外したいと考えています ( sorted([foo, key=bar)).

最近はリンクを扱っています。

現在、空のリストを作成し、値を追加する必要があります

注:nameリンクがリンクしているファイルの名前でもあります-正規表現一致のみ

parsed_links = ["http://www.host.com/3y979gusval3/name_of_file_1",          
                "http://www.host.com/6oo8wha55crb/name_of_file_2", 
                "http://www.host.com/6gaundjr4cab/name_of_file_3",                
                "http://www.host.com/udzfiap79ld/name_of_file_6", 
                "http://www.host.com/2bibqho4mtox/name_of_file_5", 
                "http://www.host.com/4a31wozeljsp/name_of_file_4"]

links = []
[links.append(link) for link in parsed_links if not name(link) in 
             [name(lnk) for lnk in links]]

最終的なリストに完全なリンクを含める必要があります (そのため、ファイル名と使用セット以外のすべてを削除することはできません)。しかし、毎回空のリストを作成せずにこれを実行できるようにしたいと考えています。

また、私の現在の方法は非効率的です (何百ものリンクを処理することが多いため、これは重要です)。

助言がありますか?

4

2 に答える 2

3

なぜ辞書を使わないのですか?

links = dict((name(link), link) for link in parsed_links)
于 2012-08-01T12:10:32.967 に答える
0

私があなたの質問を正しく理解していれば、あなたのパフォーマンスの問題は、タイトなループで繰り返し評価されるリスト内包表記に起因している可能性があります。

リスト内包表記をループの外に置いて結果をキャッシュしてappend()から、空のリストの代わりに別の内包表記を使用します。

linkNames = [name(lnk) for lnk in links]
links = [link in parsed_links if not name(link) in linkNames]
于 2012-08-01T12:08:48.113 に答える