2016-06-20 1 views
0

タプルのリストがあります。これらのタプルには整数値とカテゴリが含まれます。Python list - 最小値のタプルを見つけますが、リストをランダム化します。

mylist = ((1,catA),(1,catB),(2,catA),..) 

私の目的は、リストから値=最小値を持つタプルを1つ選択することです。値=最小値を有する1つ以上のタプルが存在する可能性がある。上記の例では、最小値は1であり、CatAとCatBの両方とも値=最小値を有する。

は、最小値を取得するには私が使用:

min_value = min(mylist , key=lambda x: x[0])[0] 

が値でタプルを選択するには= MIN_VALUE私が使用:選択したように、

min_tuple = min([x for x in mylist if x[0] == min_value]) 

は、しかし、私は、ソート順序をランダム化したいと思いますタプルは常に同じカテゴリを持つわけではありません。

min_tupleを選択する前にシャッフルを使用しようとしましたが、選択順序が変更されませんでした。

random.shuffle(mylist) 
min_tuple = min([x for x in mylist if x[0] == min_value]) 

だから、私はmin_tuple式がそれ自身の注文であると推測しています。これは本当ですか? trueの場合、min_tupleの式の順序は、value = min_valueのタプルを選択するとランダム化されますか?


編集追加する:

私は他の場所で他のSO質問/回答はしてからrandom.choiceを知っていたが、私の質問がmin tuple表現に焦点を当てた、具体的方法/それはで最小値を発見したとして、それはタプルを注文した場合リスト。

また、私の具体的な製剤は、誤ってまたは不必要(例:== min_valuemin()min valueは「二重のフィルター」を行いました。私がここで受け取った答えはこの使用法を修正し、私の具体的な方法の変更としてrandom.choiceも適用しました。

+0

[Pythonを使用してリストから項目をランダムに選択するにはどうすればよいですか?](http://stackoverflow.com/questions/306400/how-do-i-randomly-select-an-item-from-a -list-using-python)を使用します。唯一の質問は、「リストの要素をランダムに選択する方法は?」です。最小値を持つタプルにフィルタリングする方法はすでに分かっています。 – jpmc26

+0

Plsは受け入れられた答えを参照してください。私はこの特定の質問をする必要がありました。 – curtisp

+0

受け入れられた答えは 'random.choice'だけを使用し、他の質問で受け入れられた回答も同様です。ここには新しい情報はありません。 – jpmc26

答えて

3

minの計算では、min_tupleの呼び出しは、常に最小のカテゴリを持つタプルを取得することを意味します。それが本当に欲しかったのであれば、min(mylist)を実行してやり直す必要があります。

あなたがランダムに最小値を持つタプルから選択したい場合は、random.choiceようなものでminを置き換える:

min_value = min(x[0] for x in mylist) 
min_tuple = random.choice([x for x in mylist if x[0] == min_value]) 

私はもう少し直接操作するmin_valueの計算を変更しました。注(最小値を持つ最初のタプルを見つけてそこから値を抽出するのではなく)。元の方法でもうまくいきました。

+0

ああ、私は分を2回受け取っていた。明らかになっているようだし、自分のニーズに完全に対応するrandom.choiceを追加することもそうだ。 – curtisp

関連する問題