Python 检查字符串是否包含列表中的字母
我试图创建一个名为valide(seq)的函数,为了有效,字符串应该只包含字母Python 检查字符串是否包含列表中的字母,python,Python,我试图创建一个名为valide(seq)的函数,为了有效,字符串应该只包含字母atgc 例如:attgcattgggacf->true ex2:atgjglkdatfklja->false 如果有效,则应返回true;如果无效,则应返回false 每次我运行完整的代码,我输入一个字符串,其中只包含这些字母,它不接受它 def valide(seq) : sub = ["a", "t", "g", "c"]
a
t
g
c
例如:attgcattgggacf->true
ex2:atgjglkdatfklja->false
如果有效,则应返回true;如果无效,则应返回false
每次我运行完整的代码,我输入一个字符串,其中只包含这些字母,它不接受它
def valide(seq) :
sub = ["a", "t", "g", "c"]
if any(seq in s for s in sub):
return True
else:
return False
您应该使用
all()
:
all()。这是因为,正如哈克所说,字符串是可编辑的。因此,如果有任何错误,您将得到False
你可以把它浓缩一下:
def valide(seq):
sub = ["a", "t", "g", "c"]
return all(letter in sub for letter in seq)
因为您返回了一个True
/False
值
其他可能的变化
- 您可以将
[“a”、“t”、“g”、“c”]
替换为“atgc”
,因为
- 由于这是一个短字符串,您可以在
all()
函数中直接使用它,保存一行
- 您可以使用保存另一行
这些变化如下所示:
valide = lambda seq : all(letter in "atgc" for letter in seq)
此结果简洁易读。您应该使用all()
:
all()。这是因为,正如哈克所说,字符串是可编辑的。因此,如果有任何错误,您将得到False
你可以把它浓缩一下:
def valide(seq):
sub = ["a", "t", "g", "c"]
return all(letter in sub for letter in seq)
因为您返回了一个True
/False
值
其他可能的变化
- 您可以将
[“a”、“t”、“g”、“c”]
替换为“atgc”
,因为
- 由于这是一个短字符串,您可以在
all()
函数中直接使用它,保存一行
- 您可以使用保存另一行
这些变化如下所示:
valide = lambda seq : all(letter in "atgc" for letter in seq)
此结果简明易读。def有效(seq):
sub=[“a”、“t”、“g”、“c”]
对于下文中的e:
如果e不在sub中:
返回错误
返回真值
检查每个字母是否不在列表中如果字母不在列表中,它将返回false,否则列表中的所有字母将运行full for循环,最后函数将返回true
sub=[“a”、“t”、“g”、“c”]
对于下文中的e:
如果e不在sub中:
返回错误
返回真值
检查每个字母是否不在列表中如果字母不在列表中,它将返回false,否则列表中的所有字母将运行full for循环,finally函数将返回true让我们以您的输入为例:attgcattgggac
(我猜最后的f是一个打字错误)。您的代码所做的是分别查看每个字母,因此a
,然后t
,等等,并检查数组[“a”、“t”、“g”、“c”]
是否包含在其中,这显然是错误的。它还只检查是否至少有一个这样做。您应该使用all()
检查它们是否都是。您要做的是检查数组中是否存在该字母。这将使:
def valide(序列号):
sub=[“a”、“t”、“g”、“c”]
如果所有(子项中的)表示所有(子项中的):
返回真值
其他:
返回错误
由于任何生成布尔值的字符串都是可编辑的,因此也可以通过以下方式对其进行压缩:
def valide(序列号):
sub=“atgc”
返回所有子项中的项,用于返回序号中的项:
让我们以您的输入为例:
attgcattgggac
(我猜最后的f是一个打字错误)。您的代码所做的是分别查看每个字母,因此a
,然后t
,等等,并检查数组[“a”、“t”、“g”、“c”]
是否包含在其中,这显然是错误的。它还只检查是否至少有一个这样做。您应该使用all()
检查它们是否都是。您要做的是检查数组中是否存在该字母。这将使:
def valide(序列号):
sub=[“a”、“t”、“g”、“c”]
如果所有(子项中的)表示所有(子项中的):
返回真值
其他:
返回错误
由于任何生成布尔值的字符串都是可编辑的,因此也可以通过以下方式对其进行压缩:
def valide(序列号):
sub=“atgc”
返回所有子项中的项,用于返回序号中的项:
应该是
如果all(sub中的字母表示seq中的字母):return True,问题出在if语句@Harithit应该是如果all(sub中的字母表示seq中的字母):return True,问题出在if语句@harith这不是OP想要的:“为有效,字符串应仅包含字母a
,t
,g
,c
“。您正在检查sub
中的每个项目是否在seq
中。当且仅当seq
至少一次包含a
、t
、g
、c
时,您的方法才会返回true。您应该检查seq
中的所有项目是否都在sub
中。例如,valide(“a”)
在不应该的时候返回False
,而valide(“atgcz”)
在不应该的时候返回True
。是的,我很抱歉,我混淆了seq和sub。我的错。这不是OP想要的:“为有效,字符串应仅包含字母a
,t
,g
,c
“。您正在检查sub
中的每个项目是否在seq
中。当且仅当seq
至少一次包含a
、t
、g
、c
时,您的方法才会返回true。您应该检查seq
中的所有项目是否都在sub
中。例如,valide(“a”)
在不应该的时候返回False
,而valide(“atgcz”)
在不应该的时候返回True
。是的,我很抱歉,我混淆了seq和sub。我的错。