【发布时间】:2018-02-25 17:56:09
【问题描述】:
如何检查列表是否包含本身不包含任何数字的字符串?有问题的列表将有一个带有字母或数字的字符串和一个整数。
【问题讨论】:
-
您在为哪一部分苦苦挣扎?使用
isinstance只处理字符串,使用not any(map(str.isidigit, s))之类的东西来检查是否有任何字符是数字
标签: python python-3.x
如何检查列表是否包含本身不包含任何数字的字符串?有问题的列表将有一个带有字母或数字的字符串和一个整数。
【问题讨论】:
isinstance 只处理字符串,使用not any(map(str.isidigit, s)) 之类的东西来检查是否有任何字符是数字
标签: python python-3.x
您的 Q 不清楚,但我认为对于此列表:
l = ['bob', 'fish', 'abc123']
你想False,因为列表确实包含一个带数字的字符串。
对于以下内容:
l = ['bob', 'fish', 'abc']
你想要True,因为没有带数字的字符串。
要实现这两个结果,您可以使用:
not any(any(c.isdigit() for c in s) for s in l)
【讨论】:
您可以使用列表推导的组合来迭代 input_list、any() 以在第二次遇到带有 int() 的第一个字符串时返回 True(提前退出总是一个好主意),和一个正则表达式来查看字符串中是否有数字或字母([0-9] 匹配任何单个数字,[a-zA-Z] 匹配字符串中的任何字母;re.search() 将评估 True 如果这些字符串中的任何一个匹配)。
根据问题,您想检查列表中的任何字符串是否包含至少一个字母和至少一个数字,但如果它只有数字或字母就可以了。我不确定您要检查哪种情况;如果我的解释不正确,我很乐意编辑下面的代码以符合您的意图。
import re
input_list = [11, "11", "somestring", "someotherstring", "mixedstring1"]
any([x for x in input_list if re.search("[0-9]", str(x)) and re.search("[a-zA-Z]", str(x))])
True
【讨论】: