2017-09-11 4 views
-1

数字のリストが表示され、並べ替える必要があります。 入力は次のようになります。正しいインデックスのリストに値を挿入できません

i:1,3,5,8 
n:2 
t:4,7 
a:6 
v:9 

とtxtファイルの形式で提供されます。

コードは次のようになります。私は7を除いて、それをしたいと8 ので、私が間違って何をしますかどのようなほとんどです

[(1, 'i'), (2, 'n'), (3, 'i'), (4, 't'), (5, 'i'), (6, 'a'), (8, 'i'), (7, 
't'), (9, 'v')] 

:この出力を与える

flat_list = [item for sublist in decks for item in sublist] 
p = [] 

for x in range(len(flat_list)): 
    nr = flat_list[x][0] 
    o = nr -1 
    p.insert((o),(flat_list[x][1])) 

print(p) 

+0

@timgeb質問は明らかですか?彼らは、なぜコードがソートされた出力にならないのかを知りたがっています。しかし、彼らは元の入力を表示し、 'デッキ 'を表示してください –

+0

' p = [] *(len(flat_list)-1) 'が何をしているのか分かりません。 @Chris_Randsの種類: –

+0

OPの質問は彼のデータ構造について何も文脈を提供していないので、尋ねることができないように思われるので、私はいくつかのsnarkを採用しました。 – timgeb

答えて

1

あなたは空のリスト宣言:

p = [] 

をしかし、あなたはそれにlist.insertを呼び出します。これは残念なことに、いくつかの意図しない副作用を引き起こします。お守り:あなたは(999 + 1)番目場所でそれを望んでいたという事実にもかかわらず、0 番目位置に挿入され

In [209]: p.insert(999, 0) 

In [210]: p 
Out[210]: [0] 

。このようなことは、間違った場所にあるアイテムを見る理由であり、最初に正しく挿入されたことはありません。


修正は[None]リストを掛けることです。また、インデックスではなく要素を反復処理する場合は、挿入ロジックを大幅に簡略化することができます。

p = [None] * len(flat_list) 

for i, y in flat_list: 
    p[i - 1] = y 
0

あなたは本当にあなたの質問を語り合わなければなりません。

しかし、これはあなたが探している答えかもしれないと思います。

from operator import itemgetter 
flat_list = [(1,a),(6,b),(3,d),(7,c),(9,a),(4,b)] 
sorted(flat_list, key=itemgetter(0)) 

私はこれを少し見つけましたが、おそらく同じことを試してください。

+0

'itemgetter'はここでは何もしません。' sorted(flat_list) 'と同じです。とにかく、あなたは出発点として彼らの最初の入力を取っていません –

+0

私はそれを教えてくれてありがとう、参照してください。私はあまり経験はありませんが、私はここでいくつかの質問に答えることができるかどうかを見たいと思っていました。 –

+0

答えを知ったときにのみ答えます。 –

関連する問題