Python 检查字符串是否包含列表以外的字符串
我有一个字符串,如下所示:Python 检查字符串是否包含列表以外的字符串,python,python-3.x,string,Python,Python 3.x,String,我有一个字符串,如下所示: f = 'ATCTGTCGTYCACGT' 我想检查字符串是否包含除A、C、G或T以外的任何字符,如果是,请打印它们 for i in f: if i != 'A' and i != 'C' and i != 'G' an
f = 'ATCTGTCGTYCACGT'
我想检查字符串是否包含除A、C、G或T以外的任何字符,如果是,请打印它们
for i in f:
if i != 'A' and i != 'C' and i != 'G' and i != 'T':
print(i)
有没有一种方法可以在不循环字符串的情况下实现这一点?就这样做吧
l = ['A', 'C', 'G', 'T']
for i in f:
if i not in l:
print(i)
它检查列表是否包含列表的字符
如果不想循环浏览列表,可以执行以下操作:
import re
l = ['A', 'C', 'G', 'T']
contains = bool(re.search("%s" % "[" + "".join(l) + "]", f))
根据输入字符串的大小,for循环可能是最有效的解决方案 但是,由于您显式地请求一个没有显式循环的解决方案,因此可以使用正则表达式来完成
import re
f = 'ABCDEFG'
print(*re.findall('[^ABC]', f), sep='\n')
输出
D
E
F
G
您可以使用set实现所需的输出
f = 'ATCTGTCGTYCACGTXYZ'
not_valid={'A', 'C', 'G' , 'T'}
unique=set(f)
print(unique-not_valid)
输出
{'Y','X','Z'} #characters in f which are not equal to 'A','C','G','T'
从技术上讲,这会循环,但我们会将输入字符串转换为一个集合,以删除重复的值
accepted_values = ['a','t','c','g']
input = 'ATCTGTCGTYCACGT'
print([i for i in set(input.lower()) if i not in accepted_values])
要检查字符是否不在字符串中,还是要打印除某些字符以外的所有字符?这是两个不同的任务。我想知道f字符串中除了“A”、“C”、“G”或“T”之外是否还有其他字符。如果是的话,我想打印出来。你不想循环的主要原因是时间/效率吗?集合似乎是优化查找的好地方,但要以字符串转换为集合为代价,这可能会造成很大的处理开销。这回答了您的问题吗?你的意思是不使用for循环或任何循环构造。例如,在幕后,函数式编程方法可以是任意的、映射的,可以说regex也可以。为清楚起见,您希望避免使用任何循环构造的函数,还是避免使用基本的循环函数,例如For、while等?如果将前者设置为后者,我可能会采用正则表达式匹配方法。有没有一种方法可以在不循环字符串的情况下实现这一点?这段代码和OP做的完全一样,只是以一种更简洁的方式,这不是问题的前提。我对其进行了编辑,使其现在符合要求。如果OP不关心顺序或重复,则其正确性应为f='ABCA';无效={'A'}打印A或AA?@DeepSpace抱歉,我不明白您的查询应该是f='ABCA';无效={'A'}打印A或AA?如果你不介意的话,你能再解释一遍吗?如果有重复的缺失字符,你的解决方案将只打印其中一个,而且由于集合无序,因此也会出现顺序混乱。我并不是说这不好,只是OP没有具体说明他们做了什么want@DeepSpace我的第一个方法是使用正则表达式,但在OP提到的一个注释中,我想知道f字符串中是否有除“A”、“C”、“G”或“T”以外的字符,我认为set是一种选择。我也考虑过,但我不知道这是否算作循环