2016-12-04 10 views
-1

私は2つの変数:numbers = [8, 3, 1, 2, 5, 4, 7, 6]group = [2, 3, 5, 7]を持っています。 group変数は、数字が見つかった場合は番号リストの先頭にある番号です。ヘルパー関数を使ってソートする?

私が知りたいのは、返り値(0、x)と(1、x)がgroup変数の優先順位に基づいて数値をソートすることです。

def sort_priority(values, group): 
    def helper(x): 
     if x in group: 
      return (0, x) 
     return (1, x) 
    values.sort(key=helper) 
+1

それは '(0,1) x) 'と'(1、x) 'である。タプルは各要素でソートされているので、 '(0、x)'グループのすべてのメンバーが 'x 'を増やして最初に返され、'(1、x) x ' – AChampion

+0

'(0、x)<(1、x) 'はすべての' x'に対して真です –

+0

@AChampionはそれを変更しました。 –

答えて

1

Duplesを順にソートされている:

(0, 10) < (0, 50) < (1, 10) < (1, 50) 

key=helperを用いることで、ソートしながら入力を変換するhelper関数を使用します。 helperは通常の番号(たとえば7)をとり、それがgroup(この場合は(0, 7))にあるかどうかを示すタプルでラップします。次に、数字がgroupにない場合は、その後に表示されます(たとえば、(1, 6))。

+0

これは、sortメソッドがリスト内の項目をどのようにソートするかを示しています。あなたが実演したもののようなタプル比較を介して? –

+0

'sort'の' key'キーは、入力を変換することを可能にします。この場合、入力はタプルに変換されます。 'sort'は、その入力を標準の' <' and '> 'を使って比較します。これはタプルのために私が記述した方法で動作します。 – tsm

0

@tsmは質問に答えましたが、同じ効果を達成するより簡単な例を検討する価値があります。この例では、数値リストのすべてのintが100未満であることを前提としています(元のコードはより優れていますが、もっと簡単な例を提供しています)。

基本的には、グループリストのではなくでない番号に100を追加すると、非グループ番号に高いソート値が与えられます。したがって、グループ内の数字XはXのソート順を持ち、グループ内のではなくでない数字Yのソート順は100 + Yです。

numbers = [8, 3, 1, 2, 5, 4, 7, 6] 
group = [2, 3, 5, 7] 

def sort_priority(values, group): 
    def helper(x): 
     if x in group: 
      return x 
     else: 
      return 100 + x 
    values.sort(key=helper) 

print("Before:", numbers) 
sort_priority(numbers, group) 
print("After: ", numbers) 

したがって、ソートされるべき番号リストである:[8、3、1、2、5、4、7、6]

しかし、ソートは、第二、形質転換されたリストに基づいています。 [0、1、2、5、100 + 4、7、100 + 6]

関連する問題