如何列出反义词的理解清单?

2024-06-06 23:46:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一些关于列表理解的代码,程序需要做的是打印任何回文,这些回文至少有5个字符长(我已经做过了),从标准输入,也反转。例如“Damon”“nomad”“revel”“lever”都应该和回文单词放在一个列表中。你知道吗

我尝试了stackoverflow和其他编程网站的帮助,任务已经正确完成,但不是在列表理解形式。你知道吗

import sys
line = sys.stdin
all_text = [a.strip() for a in line]
atleast_5_letters = [a for a in all_text if len(a) >= 5]
reverse_words = [a for a in atleast_5_letters]
palindrome = [a for a in atleast_5_letters if a[::-1].upper() == a.upper()]
print(palindrome)

#stdin input:
#Ababa
#aaaaa
#bob
#civic
#ccccc
#Damon
#england
#Hannah
#lager
#leper
#level
#lever
#madam
#minim
#nomad
#radar
#racecar
#RaCeCar
#refer
#regal
#repel
#revel
#rever
#rotor
#tenet
#queen

['Ababa'、'civic'、'Damon'、'Hannah'、'lager'、'lever'、'madam'、'Mini'、'nomad'、'radar'、'Referer'、'regal'、'Reel'、'revel'、'rotor'、'tenet']


Tags: textin列表forifstdinsysline
3条回答

首先,我得到一组小写的五个字母的单词(这使下一步更容易):

atleast_5_letters_lower = set([w.lower() for w in atleast_5_letters])

然后,从列表中查找单词,该单词在集合中也显示为反转,忽略资本化,但保留原始资本化:

reverse_words = [a for a in atleast_5_letters if a[::-1].lower() in atleast_5_letters_lower]

输入单词的结果:

['Ababa', 'aaaaa', 'bob', 'civic', 'ccccc', 'Damon', 'Hannah', 'lager', 'leper', 'level', 'lever', 'madam', 'minim', 'nomad', 'radar', 'racecar', 'RaCeCar', 'refer', 'regal', 'repel', 'revel', 'rever', 'rotor', 'tenet']

希望这就是你要找的

palindrome=[a for a in all_text if (len(a) >= 5 and a[::-1].upper()==a.upper())]  

保存长度大于5的回文。你知道吗

使用单列表理解的另一种方法:

import sys
line = sys.stdin
print ([a.strip() for a in line if len(a.strip()) >= 5 if a.strip()[::-1].upper() == a.strip().upper()])

注意:这将只打印大于5个字母的回文单词,而不打印非回文单词。你知道吗


样本输入:

Ababa
aaaaa
bob
civic
Damon

样本输出:

['Ababa', 'aaaaa', 'civic']

相关问题 更多 >