Как составить список с определенными условиями из списка с плавающей точкой

#python #python-3.x

#python #python-3.x

Вопрос:

Снова задаю глупый вопрос. Я пытаюсь получить список, состоящий из каждого значения, которое не равно -1, из списка значений с плавающей точкой и -1. Каким-то образом я получаю только первое значение из своих циклов. Моя последняя задача — распечатать количество записей в моем новом списке.

 flist = [9.0, 5.5, 6.7, 4.3, -1, 4.8, 8.0, -1, 7.0, 6.3, 4.5, 7.75, 6.5]  
for i in flist:  
    if i != 1: 
       new_list = i
#the problem is when i tried to print out the number of entries
print(len(new_list))
  

Ошибка типа: объект типа ‘float’ не имеет функции len()

Итак, я попытался преобразовать это в список строк, и вот что у меня получилось:

 flist = [9.0, 5.5, 6.7, 4.3, -1, 4.8, 8.0, -1, 7.0, 6.3, 4.5, 7.75, 6.5]  
for i in flist:  
    if i != 1: 
       new_list = i
new_list2 = map(str, new_list)
print(len(list3))
  

Теперь я получаю следующую ошибку:

Ошибка типа: объект ‘float’ не может быть повторен

Комментарии:

1. тег jupyter-notebook здесь не уместен.

2. Я новичок, поэтому mb sry. Поскольку я использовал jupyter notebook, я вставил его.

Ответ №1:

Вам нужно добавить в список:

 flist = [9.0, 5.5, 6.7, 4.3, -1, 4.8, 8.0, -1, 7.0, 6.3, 4.5, 7.75, 6.5]  
new_list = []
for f in flist:
    if f != -1:
        new_list.append(f)
  

Или используйте понимание списка (лучший способ):

 flist = [9.0, 5.5, 6.7, 4.3, -1, 4.8, 8.0, -1, 7.0, 6.3, 4.5, 7.75, 6.5]  
new_list = [f for f in flist if f != -1]
  

В обоих случаях new_list является

 [9.0, 5.5, 6.7, 4.3, 4.8, 8.0, 7.0, 6.3, 4.5, 7.75, 6.5]
  

Если вам нужно только количество, а не сам список, вы можете сделать это:

 flist = [9.0, 5.5, 6.7, 4.3, -1, 4.8, 8.0, -1, 7.0, 6.3, 4.5, 7.75, 6.5]
count = sum(1 for f in flist if f != -1)
  

Ответ №2:

 new_list = [i for i in flist if i!=-1]
  

вы не инициализировали список. Также при добавлении элементов в список вы должны использовать append .