2017-10-18 9 views
0

私はlist_oneを使用してlist_twoをソートし、list_sortedに出力するためにPython 3を使用しようとしています。フィールドの値が不足している場合は、null値を配置したいと考えています。リストを使って別のものをソートする

['one', None, 'three', 'four', 'five', None, 'seven'] 

しかし、それは実際に出力しています:

[None, None, None, None, 'one', None, None, None, None, None, None, None, None, 'three', None, None, None, 'four', None, None, None, 'five', None, None, None, None, None, None, None, None, 'seven', None, None, None, None] 

私の現在の考え方は答えがenumerateを含んでいる出力は、所望の出力があるlist_one

list_one = ['one', 'two', 'three', 'four', 'five', 'six', 'seven'] 
list_two = ['seven', 'five', 'four', 'three', 'one'] 
list_sorted = [] 

for i in list_one: 
    for field in list_two: 
     if i == field: 
      list_sorted.append(field) 
     else: 
      list_sorted.append(None) 

print ('final output:', list_sorted) 

などの項目の同じ番号を持っているでしょう確信はないけど。どんな助けでもが高く評価されます。

+0

何も並べ替えていないようです。 –

答えて

1

list_twoを1組に変換し、その要素がlist_twoにあるかどうかに基づいてリスト内包を構築します。

set_two = set(list_two) 
list_sorted = [x if x in set_two else None for x in list_one] 

print(list_sorted) 
['one', None, 'three', 'four', 'five', None, 'seven'] 
+0

それは素晴らしいです!ありがとう@倍速。私は何か読んでいる。私はこれがStackOverflowに適しているかどうかはわかりませんが、さらに2つの質問があります。つまり、それは「3進」または短縮形ですか?もしそうなら、手書きのバージョンは何ですか?そこで何が起こっているのか分かりません。 2番目の質問は、list_twoが2次元であればどうなるでしょうか? – Jarvis

+0

@ジャービスいいえ、これは「リストの理解」と呼ばれます。 3行または短縮形は、1行にカスケードされたif-else文を含む異なる概念です(ここには表示されません)。あなたの2番目の質問については、ソリューションは似ていますが、次元を1だけ拡張する必要があります。その方法を知りたい場合は、新しい質問をしてください。さらに、最も有益な回答を受け入れることができますので、そのことを検討してください。ありがとう。 –

1

あなたは本当に何をソートしていない、しかし、あなたはあなただけilist_twoに存在しているかどうかをテストしたかったものを達成できたように見えます。内側のforループを取り外します。

list_one = ['one', 'two', 'three', 'four', 'five', 'six', 'seven'] 
list_two = ['seven', 'five', 'four', 'three', 'one'] 
list_sorted = [] 

for i in list_one: 
    if i in list_two: 
     list_sorted.append(i) 
    else: 
     list_sorted.append(None) 

print ('final output:', list_sorted) 
+0

クイックルックアップのためのセットへの変換が改善されました! https://stackoverflow.com/a/46801255/4909087 –

+0

@cᴏʟᴅsᴘᴇᴇᴅそれはかなり短く見えますが、間違いなく素敵に見えますが、それは本当に速いですか? list_oneの 'for x 'と' set_two else None None'の 'x xを参照してください。これは私のものとかなり似ています。しかし、私は多くのPythonを書いていません - これはPythonistaのやり方のなかでもっともですか? –

+1

setはO(1)のルックアップをサポートすることができ、list(list_twoなど)はそうではないので、定数のルックアップを容易にする重要なビットは 'xならset_two else none'です。この違いは小さなリストでは見られませんが、この方法は複雑な点で2次的です。まだ、素晴らしい努力、あなたは私の投票を持っているので:) –

関連する問題