我要做的一件事就是找到相反且大于或等于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()
编辑 - 感谢您的解决方案,我必须找到另一种快速完成的方法......
答案 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']