Фильтрация элементов массива.

weamagic

Пользователь
Пользователь
Июл 11, 2020
141
13
18
Win 7, Python 3.8
Добрый день. Есть массив, состоящий из смеси строковых элементов и чисел с плавающей точкой. Надо отделить одни от других. Применяю следующий код:

Python:
    def my_sum_ln(self,x):
        sum_ln=0
        for i in x:
            if type(i)=='float':
                sum_ln+=1
        print(sum_ln)
Результат не наблюдаю. Можете указать на ошибку?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
float нужно указать без кавычек:
Python:
if type(i) == float:
а лучше использовать isinstance для проверки типа элемента:
Python:
if isinstance(i, float):
 

weamagic

Пользователь
Пользователь
Июл 11, 2020
141
13
18
float нужно указать без кавычек:
Python:
if type(i) == float:
а лучше использовать isinstance для проверки типа элемента:
Python:
if isinstance(i, float):
Спасибо.
Мне лучше в явном виде - в исходниках может быть такое, что ой
 

weamagic

Пользователь
Пользователь
Июл 11, 2020
141
13
18
Обновляю тему, т.к. вопрос смежный. Пытаюсь удалить из двумерного массива строку с пустыми значениями. Код прилагаю - не работает.

Python:
        for i, row in enumerate(mass):
            for col in row:
                if col=='':
                    del(mass[i])
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 566
454
83
а можно пример массива посмотреть?
скорее в условии дело, не с тем сравниваете, так то должно работать
Python:
mass = [[''], [1], [2]]
print(mass)

for i, row in enumerate(mass):
    for col in row:
        if col == '':
            del mass[i]
print(mass)


возможно у вас пустые списки, а не пустые строки в списках, тогда можно использовать filter()
Python:
mass = [[], [1], [2], []]
mass1 = filter(None, mass)

print(list(mass1))
 
Последнее редактирование:

weamagic

Пользователь
Пользователь
Июл 11, 2020
141
13
18
а можно пример массива посмотреть?
скорее в условии дело, не с тем сравниваете, так то должно работать
Python:
mass = [[''], [1], [2]]
print(mass)

for i, row in enumerate(mass):
    for col in row:
        if col == '':
            del mass[i]
print(mass)


возможно у вас пустые списки, а не пустые строки в списках, тогда можно использовать filter()
Python:
mass = [[], [1], [2], []]
mass1 = filter(None, mass)

print(list(mass1))
Пример массива:
Python:
[['2.40', '2.0590', '', ''], ['3.00', '2.1100', '', ''], ['3.60', '2.1600', '', '']]

Вариант с фильтром проверил - результат такой же.
 
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 566
454
83
Пример массива:
Python:
[['2.40', '2.0590', '', ''], ['3.00', '2.1100', '', ''], ['3.60', '2.1600', '', '']]

Вариант с фильтром проверил - результат такой же.
Python:
mass = [['2.40', '2.0590', '', ''], ['3.00', '2.1100', '', ''], ['3.60', '2.1600', '', '']]
mass2 = []

for i in mass:
     mass2.append([x for x in i if x])

print(mass)
print(mass2)
 

weamagic

Пользователь
Пользователь
Июл 11, 2020
141
13
18
Python:
mass = [['2.40', '2.0590', '', ''], ['3.00', '2.1100', '', ''], ['3.60', '2.1600', '', '']]
mass2 = []

for i in mass:
     mass2.append([x for x in i if x])

print(mass)
print(mass2)
Спасибо. Более-менее работает.
 

Форум IT Специалистов