2015-07-12 4 views
1

У меня есть следующий список:Python - Сравнение 2 поплавки

[0.12458333333051996, 0.7976157407465507, 0.4842939814843703, 0.9736921296280343, 0.4590740740750334, 0.48178240740526235, 0.46826388888439396, 0.0013078703705105, 0.4625000000014552, 0.4758796296300716, 0.4797685185185401, 6.87130787037313, 0.49761574074364034, 2.9876041666648234, 0.4683564814768033, 0.45549768517958, 0.43494212962832535, 2.030381944445253, 0.48494212963123573, 0.817592592597066] 

Я бегу этот код в приведенном выше списке:

for dt in dtime_list: 
    if dt > 0.00694444444444444: 
     dtime_list.remove(dt) 

print(dtime_list) 

Выход:

==>[0.7976157407465507, 0.9736921296280343, 0.48178240740526235, 0.0013078703705105, 0.4758796296300716, 6.87130787037313, 2.9876041666648234, 0.45549768517958, 2.030381944445253, 0.817592592597066] 

Я ожидал, что там не будет оставаться поплавком, превышающим 0,00694444444444444. Почему это происходит и как я могу это исправить?

Мой массив на самом деле имеет значения float, считанные из excel для времени, если «dt> 0.00694444444444444« Я пытаюсь найти значения, превышающие 10 минут, и удалить их из списка.

+2

Вы никогда не должны изменять список пока переборе над ним. Начните с нового пустого списка и скопируйте только те элементы, которые вы хотите. –

+0

Дубликат [this] (http://stackoverflow.com/questions/4081217/how-to-modify-list-entries-during-for-loop)? –

ответ

0

Как уже упоминалось в комментариях, вы не должны изменять список во время итерации по нему. Создание нового списка, содержащего только те элементы, которые удовлетворяют критерию вы хотите легко с пониманием списка:

cutoff = 0.00694444444444444 
filtered_list = [ dt for dt in dtime_list if dt <= cutoff ] 
0

Это очень плохая идея, чтобы удалить элемент в некоторое время (или на). Лучшее сделать новый список!
nv_lst = []
для ДТ в dtime_list:
если дт = < +0,00694444444444444:
nv_lst.append (DT)
печати (nv_lst)

Смежные вопросы