Предположим, у меня есть список ['a', '1','student'] в Python
Я перебираю этот список и хочу проверить, какой элемент в списке является числовым.
Я пробовал all(item.isdigit()), type(item)==str. но показывает ошибку.
Примечание. Числовые значения в списке заключены в кавычки, поэтому они идентифицируются как строки. Как это пройти?
Я ожидаю определить, какой элемент в списке является числовым, а какие - буквенными значениями. Проблема заключается в том, что числовые значения заключены в кавычки, идентифицирующие их как строки.
Каково ваше определение «числового»? Они только целые? Считаются ли десятичные дроби? А отрицательные числа? Сложные числа?
@Selcuk пока у меня в списке только целые числа. без десятичных знаков, без отрицательных значений.
Вы должны были показать весь свой код. isdigit() звучит как то, что вам нужно, хотя я не знаю, почему вы завернули его в all.






Если вам нужен массив логических значений, вы можете использовать:
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], если вам нужна любая числовая строка. Который включает десятичные дроби.
я должен выполнить некоторую операцию над целыми числами, если они представляют цифры
Спасибо, также есть одно сомнение, это правда, я хочу удалить кавычки из целого числа «1» и сохранить в новый список. как убрать кавычки?
вы можете привести (преобразовать) строку '1' в целое число, используя int('i'). Чтобы получить все номера из вашего списка, используйте: [int(x) for x in lst if x.isdigit()]
я получаю TypeError: могу присоединиться только к итерации, если я приведу тип к int
Убедитесь, что вы используете [int(x) for x in lst if x.isdigit()]. Потому что, если вы сделаете int("a") или любую нечисловую строку, вы получите TypeError
newlist=(','.join(int(item) для элемента в vlist, если item.isdigit())) я сделал это, я получаю сообщение об ошибке TypeError: элемент последовательности 0: ожидаемый экземпляр str, int найден
Используйте ','.join(x for x in vlist if x.isdigit())
есть ли способ добавить еще в приведенную выше функцию соединения?
Нашла, пользуйтесь print(','.join(x if x.isdigit() else "HERE" for x in vlist)). Где HERE остальное
Вместо этого попробуйте 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)
Вам нужен массив истинности каждого значения?
[False,True,False]?