关于python:更好的方法来编写这个如果_在_语句中?

Better way to write this If _ in _ statement?

本问题已经有最佳答案,请猛点这里访问。

如果我想确定某个字符/单词在字符串中,我该怎么做?像在这个例子中(非常难看),我想知道一个字符串是否包含一个数字。

1
2
3
4
5
6
7
8
n ="I have 3 cats"

if"1" in n or"2" in n or"3" in n or"4" in n \
   or"5" in n or"6" in n or"7" in n or"8" in n \
   or"9" in n or"0" in n:
    print"This string contains a number"
else:
    print"This string does not contain a number"

这是一个非常缓慢和杂乱的方法来知道字符串是否包含数字。那么我如何才能让它沿着这些线做一些事情:

1
2
3
4
5
6
7
n ="I have 3 cats"
myList = ["1","2","3","4","5","6","7","8","9","0"]

if '''Any of the strings in myList''' in n:
    print"This string contains a number"
else:
    print"This string does not contain a number"

我在堆栈溢出中查找了这个答案,但找不到它,所以如果这是重复的,我很抱歉!我无法想象我是第一个提出这个问题的人?

btw这不是"如何查找字符串是否包含数字"的副本,因为在本例中我只是使用数字示例。我只想知道是否有一种方法可以找到一个字符串是否包含列表中的任何字符串。例如,假设我想查找一个字符串是否包含这些字符中的任何一个"/-",等等。"这不是重复的


您可以使用any

1
if any(d in n for d in myList):

或者,使用str实例方法isdigit使您的目的更加明确:

1
if any(c.isdigit() for c in n):


最简单和最有效的方法是把你想找的东西放到一个集合中,然后检查与该集合的交集。(set.intersection的论点不必是集合本身。)

1
2
3
digits = set("0123456789")
if digits.intersection(myList):
    print"Yep"