反向词似乎无法找到它们

时间:2018-02-18 20:58:31

标签: python string python-3.x

我要做的一件事就是找到相反且大于或等于5个字符的单词,对于下面的代码,我找到了回文和任何向后相同的单词

然而,我无法弄清楚如何找到它?Damon'或者' nomad'

我尝试使用sorted()来获取字谜但无法实现它。

import sys

word = []

backword = []

def main():
    for lines in sys.stdin:
        word.append(lines.strip())

    for element in word:
        if len(element.lower()) >= 5 and element.lower() == element[::-1].lower():  
                backword.append(element)        
    print(backword)


if __name__ == '__main__':
    main()

编辑 - 感谢您的解决方案,我必须找到另一种快速完成的方法......

2 个答案:

答案 0 :(得分:0)

如果我理解正确,那么您是否正在寻找列表中与列表中另一个词相反的任何单词?在这种情况下,您有几个选择。

案例1:您可以预先计算反转字符列表,如下所示:

reversed = [element[::-1].lower() for element in word if len(element) >= 5]
backword = [element for element in word if element.lower() in reversed]

制作地图也可能更快:

reversed = map(lambda s: s.lower()[::-1], word)
backword = [element for element in word if element.lower() in reversed]

案例2:你可以每次反向和检查:

backword = [element for element in word if element[::-1] in word]

如果您使用了大写字词而未过滤掉:

backword = [element for element in word if element[::-1] in word or element[::-1].lower().capitalize() in word]

如果您在word中有混合套管,则应使用案例1,因为您可以根据具体情况预先计算两个值,并降低复杂度。

答案 1 :(得分:0)

使用您提供的结构,这将有效:

words = ['Damon', 'test', 'word', 'nomad']

reverse = []
words_set = set(map(str.lower, words))

for element in words:
    if len(element.lower()) >= 5 and element.lower()[::-1] in words_set:
        reverse.append(element)

print(reverse)

# ['Damon', 'nomad']