配列内の最も低い正の値とリスト内でのその位置を見つけようとしています。リスト内の値が重複している場合は、最初のインスタンスのみが関係します。これは私が欲しいものを持っていますが、0が含まれています。
print "Position:", myArray.index(min(myArray))
print "Value:", min(myArray)
たとえば、現状では、
myArray = [4, 8, 0, 1, 5]
次に、位置:2、値:0
現在の位置にしたい:3、値:1
ジェネレーター式 をmin
とともに使用できます。これにより、m
がa
の0より大きい最小値として設定されます。次に、list.index
は、この値が最初に表示されたときのインデックスを見つけます。
a = [4, 8, 0, 1, 5]
m = min(i for i in a if i > 0)
print("Position:", a.index(m))
print("Value:", m)
# Position: 3
# Value: 1
次のように、min
関数とenumerate
関数を使用できます
_result = min(enumerate(a), key=lambda x: x[1] if x[1] > 0 else float('inf'))
print("Position : {}, Value : {}".format(*result)
# Position : 3, Value : 1
_
これにより、値が_0
_より大きい場合は、最小値の比較にその値を使用し、そうでない場合は可能な最大値(float('inf')
)を使用します。
アイテムの実際のインデックスに沿って反復処理を行うため、別のループで実際のインデックスを見つける必要はありません。
これは、ジェネレータ式でそれを行う別の方法です。 enumerate(aおよびb)からの値がタプルでどのように交換され、正しくソートされるかに注意してください。
value,position = min(((b,a) for a,b in enumerate(myArray) if b>0), default=(None,None))
デフォルトの引数は、ジェネレータ式が何も返さない場合(つまり、0より大きいアイテムがない場合)に返されます。デフォルトは、周囲のプログラムロジックで意味のあるものに設定できます。ここでNone
を返すと、if value:
またはif position:
次にフィルターを追加します。
myArray = [4, 8, 0, 1, 5]
result = min(filter(lambda x: x > 0, myArray))
print result # 1
print myArray.index(result) # 3
def find_min_position(array):
plus_array = [elem for elem in array if elem > 0]
min_elem = min(plus_array)
return min_elem, array.index(min_elem)
In : find_min_position([4, 8, 0, 1, 5])
Out: (1, 3)
複雑でアルゴリズム的な方法:
int min = array[0], i = 1
list smallest //list of indexes of the smallest element
// find the first element greater than 0
while (min <= 0 and i < array.length) {
min = array[i]
i++
}
// find the first instance of the smallest element greater than 0
while (i < array.length) {
if (array[i] < min and array[i] > 0) {
clear the list
min = array[i]
list.append(i)
}
else if (array[i] == min) {
list.append(i)
}
i++;
}
これで、0より大きい最小の要素の最初のインスタンスが、リストに追加した最初の要素になります。
編集:最小値のすべてのインデックスのリストもあります。いくつかの簡単なチェックで、配列に0より大きい要素がないか、リストが空かどうかなどがわかります。
import numpy as np
x = np.array([1,2,0,5,10])
x = np.extract(x>0,x)
min_index = np.amin(x)
min_value = np.argmin(x)