我很想检查文本中的字母是否以相同的顺序出现在另一个文本中。
text "Ce"
name "Arsenic"
Answer False
for x in text:
if x.lower() not in name.lower():
return False
我希望检查顺序,以便元素在另一个字符串中以相同的顺序出现:True else False。
目前,我的代码只会检查字母是否也出现在字符串中,但如果它们的顺序相同则不会。
答案 0 :(得分:2)
我假设你的"顺序"表示字符按顺序匹配。在你的示例文本" Ce" name Arsenic应返回False,如果文本是" eC"则应返回True。代替。
首先我们检查所有字符是否在匹配文本中,如果是,我们进一步检查匹配的索引是否有序,否则我们只返回False
def check_text(text, name):
name_lower = name.lower()
if all(x in name_lower for x in text.lower()):
char_index = [name_lower.index(x) for x in text.lower()]
return char_index == sorted(char_index)
else:
return False
>>> check_text("Ce", "Arsenic")
False
>>> check_text("eC", "Arsenic")
True
答案 1 :(得分:1)
基本上,您要检查text
中是否包含name
。因此,不是在逐个字符级别(即,如果文本中的所有字符都出现在名称中,以及您现在的方式),请使用两个字符串上的in
运算符来检查{{1} } text
in
。
即。
name
请参阅https://www.pythoncentral.io/how-to-see-if-a-string-contains-another-string-in-python/
答案 2 :(得分:1)
这样做的一种方法是避免遍历单词的每个字母。
if any(text in name for text in text_collection):
print(text)
这将针对text
中的字符串检查整个name
字符串。这假设text_collection有多个条目。否则,只需使用if any(text in name):
请参阅any here.
答案 3 :(得分:1)
简单
text = "Au"
name = "Gold"
text.lower() in name.lower()
False
text = "C"
name = "Carbon"
text.lower() in name.lower()
True