Здесь что-то странное (по крайней мере, для меня странное). Я пытаюсь пометить «nan» значения из одного списка и соответствующие значения из другого списка. Мне сообщили, что вы не можете поместить из списка, который перечисляется, поэтому я сделал временный список.Вычисление значений из двух списков одновременно
import numpy as np
a=[]
b=[]
for i in range(0,100): #alternating list of ints and nan
if i/2. == i/2:
a.append(i)
else:
a.append(np.mean([])) #the only way I know how to make nan
b.append(i*100)
atemp=a
print(len(a),len(atemp))
for i,v in enumerate(atemp):
if np.isnan(v):
a.pop(i)
b.pop(i)
print(len(a),len(atemp))
Пару вещей происходит, что я не понимаю:
1) это, кажется, выскакивают из atemp пренебрежимо малых и а, хотя я только говорю это a.pop (я) и не atemp.pop (i). Есть ли какая-то функция перегрузки или что-то приравнивающее a и atemp, которые я не вижу? Как мне сделать их совершенно отдельные списки (т.е. только выскочить из а и не atemp?
2) не появляются все Нэн и цикл должен быть повторен несколько раз, чтобы выскочить все Нэн
'atemp = a' делает' atemp' и 'a' точку в том же списке. Если вы хотите, чтобы они были разными (т. Е. Удаление из 'atemp' не удаляется из' a'), вам нужно 'atemp = a [:]'. –
Кроме того: если вы используете numpy, вы можете использовать 'np.nan' напрямую, чтобы получить значение NaN. Даже без этого вы можете делать 'float (" nan ")'. – DSM
Благодарим вас за очень быстрые и полезные ответы. К сожалению, я получаю False с [1] == np.nan и a [1] = float ("nan") Я все еще не получаю то, что хочу. Если вы перейдете из списка, перечислив список atemp, я столкнулся с ошибкой «pop index out of range». Должен быть более простой способ ... возможно, используя zip (a, b) – Wes