пару вещей:
- Попробуйте
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. Это очень хороший способ сделать что-то.
Вам действительно не нужно вообще работать с индексами. – habnabit
Автор спросил, как найти pvap и xvap за минимальное значение, которое они нашли (и соответствующий ему индекс darr). Вам действительно нужно работать с индексами из этих списков, чтобы снова найти их. :) – Andrew
спасибо за объяснение, помогло много :) , но 'minindex = darr.index (mini)' возвращает ошибку; видимо, '' dict 'object не имеет атрибута' index'' – pjehyun