2017-10-30 9 views
-2

タイトルは、非常に簡潔に問題を記述するのが非常に困難になるため、主にあまり良くありません。もし誰かが以下の内容を読んだ後にタイトルを改善できたら、それをしてください。数字のリストを編集する0からnまでしか含めることができないn

これは問題です。入力は[1,3,4,7]のような数字の配列で、出力は[1,2,3,4]のような配列になります。これは、各値がその値に基づいて入力配列内のどのランクにランク付けされているかを示すためです。

他のいくつかの例:

In[1] : [4,3,7,9] 

Out[1] : [2,1,3,4] 


In[2] : [0,4,1,9] 

Out[2] : [0,2,1,3] 

In[3] : [1,0,0,0] 
Out[3] : [1,0,0,0] 

ここで注目すべきクセが配列のゼロが含まれている場合In[1]のためにそれがゼロを含んでいないので、一方でそれは、ゼロからのランキング開始しなければならないということである、配列が1からランク付けを開始します。

現在、私はこのコードを使用しています:

def argsort(seq): 
    ix = list(range(len(seq))) 
    ix.sort(key=lambda x: seq[x]) 
    out = [0] * len(i) 
    for i, x in enumerate(ix): 
     if seq[x] != 0: 
      out[x] = i 

    if 0 in seq: 
     return out 
    else: 
     return [each+1 for each in out] 

現在、解決策は、最初の2例のために動作します。しかし、それはケース3に失敗し、結果としてこれを返す:あなたはこのようにそれを行うだけでできるので、あなたはPythonのリストではありません(あなたがタグ付けされてきたように)numpyの配列きたよう[3,0,0,0]

+1

あなたが現在行っていることを教えてくれたので、問題は何ですか?あなたが持っているものとあなたが望むものとの違いを指定してください。 –

+0

@JesseBarnett絶対に正しいです。私を許して。反映するように編集します。 –

+0

私の提供するソリューションをチェックできますか? 3つすべての場合に有効です。 –

答えて

1

が見える:

inList = [4,3,7,9] 
sortedinList = sorted(set(inList)) 
outList = [sortedinList.index(e)+ (0 not in inList) for e in inList] 

重複のインデックスを同じにしたいので、listの代わりにsetを使用してインデックスを取得できます。

OUTPUT

>>> inList = [4,3,7,9] 
>>> outList 
[2,1,3,4] 


>>> inList = [0,4,1,9] 
>>> outList 
[0,2,1,3] 

>>> inList = [1,0,0,0] 
>>> outList 
[1,0,0,0] 
+0

申し訳ありませんが、どこにnumpy配列のタグが付いているのか分かりませんが、単に「配列」としてタグ付けされていますか?私が間違いを犯した場合、私はそれを修正できるので、私に知らせてください。 –

+0

pythonにはリストがあり、numpyにはPythonの配列があります。 –

+0

Ah。正しい。反映するように編集します。混乱をおかけして申し訳ありません。 –

0
def argsort(seq): 
    sorted_seq = sorted(seq) 
    res = [] 

    for _ in sorted_seq: 
     my_index = seq.index(_) 
     res.append(my_index) 
     seq[my_index] = '$' 
    return res 


if __name__ == "__main__": 
    my_list = [4,3,7,9] 

    print argsort(seq=my_list) 

出力:

[1, 0, 2, 3] 

ここでは、私はこれがあなたの質問を解決を願って、別の代替ソリューションです。

+0

'' [1,0,0,0] '' 'をチェックした結果、' '' [1,2,3,0] '' ' –

+0

は[1,0,0,0 ]? –

関連する問題