2016-10-19 1 views
0

だから私は、現在持っていることは、誰もがそれが何であるかを知っていれば、私はKWICの反復を作ってるんだ、このように見える文字列、リストのタプルのリストをソートします。大文字小文字を区別しない

hello here, hello there, hello Everywhere 

です。必要な書式は、リストのタプルのリストです。大文字と小文字は区別されません。だから、最後に、私は現在、私は

Final_Array.sort(key = lambda a: a[0][0].lower()) 

のようなPythonのソートを使用していますしかし、それは私に

(['Everywhere', 'hello', 'here,', 'hello', 'there,', 'hello'], 0) 
(['hello', 'there,', 'hello', 'Everywhere', 'hello', 'here,'], 0) 
(['hello', 'Everywhere', 'hello', 'here,', 'hello', 'there,'], 0) 
(['hello', 'here,', 'hello', 'there,', 'hello', 'Everywhere'], 0) 
(['here,', 'hello', 'there,', 'hello', 'Everywhere', 'hello'], 0) 
(['there,', 'hello', 'Everywhere', 'hello', 'here,', 'hello'], 0)` 
のように見えるソートされたリストを与える

(['here,', 'hello', 'there,', 'hello', 'Everywhere', 'hello'], 0) 
(['hello', 'there,', 'hello', 'Everywhere', 'hello', 'here,'], 0) 
(['there,', 'hello', 'Everywhere', 'hello', 'here,', 'hello'], 0) 
(['hello', 'Everywhere', 'hello', 'here,', 'hello', 'there,'], 0) 
(['Everywhere', 'hello', 'here,', 'hello', 'there,', 'hello'], 0) 
(['hello', 'here,', 'hello', 'there,', 'hello', 'Everywhere'], 0)` 

のように見えるソートされていないリストを持っています

明らかに、hello Everywhereは、hello hereと一緒にhello thereの前でなければなりません。 アクセスされたリストの最初の単語を下位に送信することに基づいてソートしていますが、並べ替えてアクセスしたリストのすべてのエントリを比較する必要があります。次に、すべてを無視しながら。

+1

:-)その意見に同意し、すべての単語を下げる必要があります。 'lambda a:list(map(str.lower、 a [0])) ' –

+0

素晴らしい!本当にありがとう、私は永遠にそれに固執しています。 – Dringo

答えて

-1
Final_Array.sort(key=lambda x: list(map(str.lower, x[0]))) 
+2

'map'はPy3のシーケンスコンストラクタ(例えば' list')内でのみラッピングする必要があります(Py2ではシーケンスを返します)。そして、Py3のラッピングが必要な限り、 'list'の代わりに' tuple'を使用することもできます。 'tuple'は定数/固定長の使用法に対して若干最適化されています。 – ShadowRanger

+2

このコードスニペットは問題を解決するかもしれませんが、[説明を含む](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)は本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 – andreas

2

現在、並べ替えはリスト内の最初の単語のみを考慮しています。それはソート辞書順に基づいてリスト内のすべての単語を作るために、あなたのソートキーは、小文字の単語(入力リスト内の各単語に1つの小文字に変換語)

def sort_key(t): 
    word_list, integer = t 
    return [word.lower() for word in word_list] 

Final_Array.sort(key=sort_key) 
リストを返す必要があります

によりソートの複雑さに、私はこのケースでは、ラムダを避けることを好むだろうが、誰もが必ずしもあなたが最初の単語だけにアクセスしている

+3

それは完璧なクロムラムダです。 'lambda t:w [t]のwのためのw.lower()' – kindall

+1

@kindall - それをラムダとして使うことは歓迎ですが、残りの部分をスローするとかなり早く読み込みが始まります(IMHO): 'Final_Array.sort(key = lambda t:[w] t [0]])'のようになります。私は自分自身に考えを残している - 't [0]'とは何ですか?何が 'w'ですか?インデントレベルに応じて、80文字の制限を超えて、ステートメントを壊す場所を特定する必要があります。冗長で電話しますが、余分な機能を好むでしょう:-) – mgilson

+0

これも試しています並べ替えの複雑さを除けば、ラムダではなくオーバーヘッドの原因となるキーとしての機能を放棄しませんでしたか?私は、ラムダがより速くなるか、機能すると言うことを言っていると思いますか?私はラムダがとにかく任意の関数だと思った? – Dringo

関連する問題