遍历数字和字符串列表
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)
假设我在 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)