【发布时间】:2023-04-01 17:29:01
【问题描述】:
我有一个问题。如果我有一个字符串,例如:
str1 = 'Wazzup1'
和数字:
nums = '1234567890'
我需要一个代码来查看 str1 并告诉我它是否有任何数字(不是所有数字)。请帮忙。
【问题讨论】:
我有一个问题。如果我有一个字符串,例如:
str1 = 'Wazzup1'
和数字:
nums = '1234567890'
我需要一个代码来查看 str1 并告诉我它是否有任何数字(不是所有数字)。请帮忙。
【问题讨论】:
any(x in nums for x in str1)
下面是一个演示:
>>> str1 = 'Wazzup1'
>>> nums = '1234567890'
>>> any(x in nums for x in str1)
True
>>>
请注意,以上内容适用于您有一组自定义数字要测试的情况。但是,如果您只是在寻找数字,那么更简洁的方法是使用 str.isdigit:
>>> str1 = 'Wazzup1'
>>> any(x.isdigit() for x in str1)
True
>>>
【讨论】:
使用any 函数,该函数返回一个布尔值,当迭代中至少有一个元素为真时为真。
string = 'Wazzup1'
result = any(c.isdigit() for c in string)
print(result) # True
【讨论】:
正如大多数 Python 程序员会告诉你的,最简洁的方法是使用:
any(x in nums for x in str1)
但是,如果您是 Python 新手或需要更好地掌握字符串操作的基础知识,那么您应该学习如何使用更基础的工具来做到这一点。
您可以在 Python 中使用方括号来访问字符串、列表、元组或任何其他 iterable 中索引的各个元素。字符串的字符从 0 开始索引(例如,"hello"[0] 给出 "h")。
使用for循环,对于Python新手来说,这个解决方案比上面提到的any解决方案更容易理解:
result = False
for i in range(len(str1)):
if str1[i] in nums:
result = True
Python for 循环也可以直接遍历字符串的元素:
result = False
for x in str1:
if x in nums:
result = True
在本文的第一个代码 sn-p 中,表达式x in nums for x in str1 使用了 Python 的 列表推导 功能。这会遍历str1 的每个元素x 并找到x in nums 的结果。 any(x in nums for x in str1) 返回True 如果(且仅当)这些结果中至少有一个是True(意味着数字在str1 中)。这很像本文中给出的第二个for 循环示例,许多Python 程序员选择此选项是因为它简洁且其他Python 程序员仍然可以理解。
【讨论】:
您可以使用any()和string.digits来检查字符串是否包含数字:
import string
if any(x in string.digits for x in str1):
pass
【讨论】:
你也可以使用正则表达式:
>>> str1 = 'Wazzup1'
>>> import re
>>> bool(re.search(r'\d', str1))
True
注意:由于语言环境或 Unicode,c.isdigit()、c in nums、int(c) 和 \d 定义数字的方式可能有所不同。
【讨论】: