如何检查字符串中的字母是否以相同的顺序出现在另一个字符串中

时间:2017-12-05 01:32:03

标签: python

我很想检查文本中的字母是否以相同的顺序出现在另一个文本中。

text    "Ce"
name    "Arsenic"
Answer   False


for x in text: 
    if x.lower() not in name.lower():
        return False

我希望检查顺序,以便元素在另一个字符串中以相同的顺序出现:True else False。

目前,我的代码只会检查字母是否也出现在字符串中,但如果它们的顺序相同则不会。

4 个答案:

答案 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