Есть ли способ вывести числа только из списка питонов?

Простой вопрос:

list_1 = [ 'asdada', 1, 123131.131, 'blaa adaraerada', 0.000001, 34.12451235265, 'stackoverflow is awesome' ]

Я хочу создатьlist_2 такой, что он содержит только цифры:

list_2 = [ 1, 123131.131, 0.000001, 34.12451235265 ]

Есть ли упрощенный способ сделать это, или я должен прибегнуть к проверке типа переменной каждого элемента списка и выводить только числовые?

 user14201914 авг. 2009 г., 15:51
Почему, черт возьми, этот вопрос проголосовал ??
 dassouki14 авг. 2009 г., 16:04
Черт возьми, это когда я хотел бы выбрать два ответа
 SilentGhost14 авг. 2009 г., 16:06
и почему сейчас так высоко голосуют? Это'дубликат многих вопросов здесь!

Ответы на вопрос(9)

[s for s in myList if s.isdigit()]

Надеюсь, поможет!

list_2 = [i for i in list_1 if isinstance(i, (int, float))]

Все предлагаемые решения работают, только если числа внутри списка уже преобразованы в соответствующий тип (,intfloat).

Я обнаружил, что список изfetchall функцияsqlite3, Все элементы там были отформатированы какstrдаже если некоторые из этих элементов были целыми числами.

cur.execute('SELECT column1 FROM table1 WHERE column2 = ?', (some_condition, ))
list_of_tuples = cur.fetchall()

Эквивалент из вопроса будет иметь что-то вроде:

list_1 = [ 'asdada', '1', '123131', 'blaa adaraerada', '0', '34', 'stackoverflow is awesome' ]

Для такого случая, чтобы получить список только с целыми числами, я нашел эту альтернативу:

list_of_numbers = []
for tup in list_of_tuples:
    try:
        list_of_numbers.append(int(tup[0]))
    except ValueError:
        pass

list_of_numbers будет содержать только все целые числа из исходного списка.

>>> [ i for i in list_1 if not str(i).replace(" ","").isalpha() ]
[1, 123131.13099999999, 9.9999999999999995e-07, 34.124512352650001]
 SilentGhost14 авг. 2009 г., 15:56
это было быочень медленный

если не считать пути SilentGhost

list_2 = [i for i in list_1 if isinstance(i, (int, float))] 

в

list_2 = [i for i in list_1 if not isinstance(i, str)]
list_2 = [i for i in list_1 if isinstance(i, (int, float))]
 hughdbrown14 авг. 2009 г., 16:05
Вероятно, имелось в виду: list_2 = [i для i в list_1, если isinstance (i, (int, float))]
 SilentGhost14 авг. 2009 г., 15:49
isinstance принимает только 2 аргумента.
Решение Вопроса

Это должно быть наиболее эффективным и кратчайшим:

import operator
filter(operator.isNumberType, list_1)

Редактировать: это в Python 3000:

import numbers
[x for x in list_1 if isinstance(x, numbers.Number)]
 dalloliogm14 авг. 2009 г., 16:53
хорошо .. я неЯ плохо знаю Python 3k, поэтому я снова изменил пример.
 SilentGhost14 авг. 2009 г., 15:58
победил'не работает в py3k
 dalloliogm14 авг. 2009 г., 16:01
Я нене использовать py3k, но тогда это будет просто isinstance (x, numbers.Number) вместо operator.isNumberType)
filter(lambda n: isinstance(n, int), [1,2,"three"])
 Jeff Ober14 авг. 2009 г., 15:47
Для проверки на различные типы: фильтр (лямбда n: isinstance (n, int) или isinstance (n, float), list_of_values)
 dassouki14 авг. 2009 г., 15:47
я имел в виду цифры в целом, а не только целые

Список понятий.

list_2 = [num for num in list_1 if isinstance(num, (int,float))]
 dassouki14 авг. 2009 г., 15:49
отлично сработало, спасибо: D
 Corey D14 авг. 2009 г., 15:51
Возможно, стоит добавить тип long в ваш кортеж.
 dalloliogm14 авг. 2009 г., 15:59
Чтобы улучшить это, вы можете использовать operator.isNumberType, чтобы определить, является ли элемент числом (см. Мой другой ответ, чтобы сделать это с фильтром вместо понимания списка).

Ваш ответ на вопрос