Итерация по списку чисел и строк

Предположим, у меня есть список ['a', '1','student'] в Python

Я перебираю этот список и хочу проверить, какой элемент в списке является числовым. Я пробовал all(item.isdigit()), type(item)==str. но показывает ошибку.

Примечание. Числовые значения в списке заключены в кавычки, поэтому они идентифицируются как строки. Как это пройти?

Я ожидаю определить, какой элемент в списке является числовым, а какие - буквенными значениями. Проблема заключается в том, что числовые значения заключены в кавычки, идентифицирующие их как строки.

Вам нужен массив истинности каждого значения? [False,True,False]?

Freddy Mcloughlan 04.04.2022 02:06

Каково ваше определение «числового»? Они только целые? Считаются ли десятичные дроби? А отрицательные числа? Сложные числа?

Selcuk 04.04.2022 02:06

@Selcuk пока у меня в списке только целые числа. без десятичных знаков, без отрицательных значений.

Ayesha 04.04.2022 02:12

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

Mark Ransom 04.04.2022 02:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
93
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Если вам нужен массив логических значений, вы можете использовать:

lst = ['a', '1', 'student']
y = [x.isdigit() for x in lst]
>>> y
[False, True, False]

Где x.isdigit() возвращает true, если строка x представляет собой цифру. Вы также можете использовать [x.isnumeric() for x in lst], если вам нужна любая числовая строка. Который включает десятичные дроби.

я должен выполнить некоторую операцию над целыми числами, если они представляют цифры

Ayesha 04.04.2022 02:12

Спасибо, также есть одно сомнение, это правда, я хочу удалить кавычки из целого числа «1» и сохранить в новый список. как убрать кавычки?

Ayesha 04.04.2022 02:16

вы можете привести (преобразовать) строку '1' в целое число, используя int('i'). Чтобы получить все номера из вашего списка, используйте: [int(x) for x in lst if x.isdigit()]

Freddy Mcloughlan 04.04.2022 02:33

я получаю TypeError: могу присоединиться только к итерации, если я приведу тип к int

Ayesha 04.04.2022 02:49

Убедитесь, что вы используете [int(x) for x in lst if x.isdigit()]. Потому что, если вы сделаете int("a") или любую нечисловую строку, вы получите TypeError

Freddy Mcloughlan 04.04.2022 02:51

newlist=(','.join(int(item) для элемента в vlist, если item.isdigit())) я сделал это, я получаю сообщение об ошибке TypeError: элемент последовательности 0: ожидаемый экземпляр str, int найден

Ayesha 04.04.2022 03:25

Используйте ','.join(x for x in vlist if x.isdigit())

Freddy Mcloughlan 04.04.2022 03:40

есть ли способ добавить еще в приведенную выше функцию соединения?

Ayesha 04.04.2022 04:39

Нашла, пользуйтесь print(','.join(x if x.isdigit() else "HERE" for x in vlist)). Где HERE остальное

Freddy Mcloughlan 04.04.2022 08:21

Вместо этого попробуйте isdigit():

l = ['a', '1', 'student']
for item in l:
    if item.isdigit():
        print(f'{item} is a digit')
    elif item.isalpha():
        print(f'{item} is a letter')

В приведенном вами примере извлечение списка, содержащего все числа, выполняется с помощью:

myList = ['a', '1','student']
onlyNumbers = [x for x in myList if x.isdigit()]
print(onlyNumbers)

Важно различать числовой тип (int, float или Decimal) и строку, представляющую число. Если бы у вас был список, содержащий элементы как строкового, так и целочисленного типов, вы могли бы извлечь элементы, изменив предыдущий пример следующим образом:

myList = ['a', 1,'student']
onlyNumbers = [x for x in myList if isinstance(x,int)]
print(onlyNumbers) 

Обратите внимание, что 1 больше не цитируется. Это означает, что это целочисленный тип.

Вот несколько рекомендаций:

all(iterable,condition)

возвращает одно значение, указывающее, являются ли ВСЕ значения в итерации истинными. Он не извлекает все значения, которые верны, что, по-видимому, является заблуждением, которое у вас есть.

Вместо type(x)==str вы можете использовать isinstance(x,str), что немного чище.

Чтобы извлечь числа из строк, вы можете использовать регулярные выражения. В качестве альтернативы проще попытаться преобразовать строку в этот числовой тип:

anInteger = int("13")
aFloat = float("1")+float("1.2")
aComplex = complex("1+1j")

Это пример, чтобы показать, что это работает в полном объеме. Он основан на числовых типах Python, выдающих исключение, когда неверное представление этого типа передается конструктору типа.

def isNumberType(repStr : str, numType):
    try:
        numType(repStr)
        return True
    except:
        return False
x = ["12.32","12","ewa"]
onlyIntegers = [int(val) for val in x if isNumberType(val,int)]
print(onlyIntegers)

Другие вопросы по теме

Программа Python для чтения целых чисел и остановки при вводе 0, а затем печатает общее количество введенных положительных чисел
Можно ли передавать операторы сравнения в качестве параметров в функции?
Numpyic способ взять первые N строк и столбцов из каждых M строк и столбцов из квадратной матрицы
Как записать историю того, что произошло при использовании сортировки в python для одной строки, и применить ее к другим строкам?
Ошибка сериализации dict в json и записи в bigquery
Преобразовать число с запятой и буквой в число с плавающей запятой?
Paython (Pandas): частота подсчета каждой ячейки в двух столбцах
Список текстовых файлов Magic 8 ball
Значения, не сохраненные в переменных Tkinter
Я хочу сделать цикл, который задерживает пользователя до тех пор, пока не будет введено правильное слово, но когда введено правильное слово, он не показывает правильный вывод