遍历数字和字符串列表

Iterating through a list of numbers and strings

假设我在 Python

中有一个列表 ['a', '1','student']

我正在遍历此列表并想检查列表中的哪一项是数字。 我试过 all(item.isdigit())type(item)==str。但显示错误。

注意:列表中的数值用引号引起来,因此它们被识别为字符串。 如何克服它?

我希望确定列表中的哪些项目是数字值,哪些是字母值。挑战在于将数值括在引号中,将它们标识为字符串

如果你是在一个布尔数组之后,你可以使用:

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

其中 x.isdigit() returns 如果字符串 x 表示数字,则为真。如果您在任何数字字符串之后,也可以使用 [x.isnumeric() for x in lst]。其中包括小数。

请尝试 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)

returns 单个值,指示可迭代对象中的所有值是否为真。它不会提取所有真实的值,这似乎是您的误解。

您可以 isinstance(x,str) 而不是 type(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)