Пара вещей:
- Попробуйте
enumerate
- Вместо
darr
, являющегося list
, используйте dict
и сохранитеdvp
значения в качестве ключей, с переменными xindex
и pindex
в качестве значений
Вот код
for xindex, xvalue in enumerate(xarr):
darr = {}
for pindex, pvalue in enumerate(parr):
dvp = math.fabs(xvalue - pvalue)
darr[dvp] = {'xindex': xindex, 'pindex': pindex}
mini = min(darr.keys())
minix = darr[mini]['xindex']
minip = darr[mini]['pindex']
minindex = darr.keys().index(mini)
print "minimum_index> {0}, is the difference of xarr[{1}] and parr[{2}]".format(minindex, minix, minip)
darr.clear()
Пояснение
Функция enumerate
позволяет перебирать список, а также получать индекс элемента.Это альтернатива вашему range(100)
.Обратите внимание, что у меня нет строки, где я получаю значение по индексу xpre
, ppre
, это потому, что функция enumerate
дает мне и индекс, и значение в виде кортежа.
Наиболееважное изменение, однако, заключается в том, что вместо того, чтобы darr
был списком, подобным этому:
[130, 18, 42, 37 ...]
Теперь это словарь, подобный следующему:
{
130: {'xindex': 1, 'pindex': 4},
18: {'xindex': 1, 'pindex': 6},
43: {'xindex': 1, 'pindex': 9},
...
}
Так что теперь вместопросто сохраняя только значения dvp
, я также сохраняю индексы в x
и p
, которые генерировали эти значения dvp
.Теперь, если я хочу что-то узнать, скажем, какие значения x
и p
дают значение dvp
, равное 43?Я бы сделал это:
xindex = darr[43]['xindex']
pindex = darr[43]['pindex']
x = xarr[xindex]
p = parr[pindex]
Теперь x
и p
являются значениями, о которых идет речь.
Примечание Я лично буду хранить значения, которые привели кконкретные dvp
, а не индексы этих значений.Но вы попросили индексы, поэтому я дал вам этот ответ.Я собираюсь предположить, что у вас есть причина желать обрабатывать такие индексы, но в Python вы, как правило, не обрабатываете индексы таким образом, когда программируете на Pythonic.Это очень C способ делать вещи.