-1

Python でリストの 2D リストがあり、列 1 で最小のフロートを見つけてから、同じ行の列 0 で値を返す必要があります。

mylist =  [['someid-1', None] ,['someid-2', 4545.474] ,['someid-3', 200.1515] ,['someid-4', None] ,['someid-4', 0]]

この場合、返してほしい: someid-3

現時点では、そうでないのみを追加してからこれを実行しています:(これは、このような「単純な」タスクには複雑に思えます) None

    mylist.sort(key=lambda x: x[1])
    if len(temp_op_distance_list) != 0 and temp_op_distance_list[0][1] != None:
        return temp_op_distance_list[0][0]

Python プロジェクト全体に関する情報。

リストは、値が「なし」および一部の約 8000 エントリfloatsです。このコードは、3D 空間でマウスポインターまでの距離を収集し、プログラム内のすべての 3D オブジェクトをテストします。値がある場合None、オブジェクトはヒットしませんでした。

編集済み:適切なリストのフォーマット - もちろん、私のリストが正しくないことを指摘して、あなたはすべて正しい. 申し訳ありません。

4

2 に答える 2

1

あなたのリストが適切なPythonリストであると仮定する

mylist =  [['someid-1', None] ,['someid-2', 4545.474] ,['someid-3', 200.1515] ,['someid-4', None] ,['someid-4', 0]]

ジェネレータ式を作成し、有効なゼロ以外のアイテムのみを選択minして、キーの使用を次のように決定するだけです。itemgetter(1)

>>> from operator import itemgetter
>>> min((e for e in mylist if e[1]), key = itemgetter(1))[0]
'someid-3'
于 2013-02-21T16:59:25.480 に答える
0

フィルタリングmin():を組み合わせる

from operator import itemgetter

id = min(filter(itemgetter(1), mylist), key=itemgetter(1))[0]
  • filter(itemgetter(1), mylist)、2番目の要素がfalseであるすべての要素を削除します。Falseブールコンテキストで。これにはとが含まれ0ますNone

  • min(..., key=itemgetter(1))与えたキーに基づいて最小値を見つけます。したがって、フィルタリング後のフロート値が最も低いリスト。

  • [0]リストからidエントリを選択します。

簡単なデモ(構文的に正しい入力リストを使用):

>>> mylist = [
...     ['someid-1', None], 
...     ['someid-2', 4545.474], 
...     ['someid-3', 200.1515], 
...     ['someid-4', None], 
...     ['someid-5', 0]
... ]
>>> from operator import itemgetter
>>> min(filter(itemgetter(1), mylist), key=itemgetter(1))[0]
'someid3'
于 2013-02-21T16:52:22.720 に答える