3 回答
TA贡献1811条经验 获得超4个赞
您join可以免于处理剩余空间的麻烦和 '.'
stopwords = ['to', 'a', 'for', 'by', 'an', 'am', 'the',
'so', 'it', 'and', 'The']
sent = "The water earth and air are vital"
s_sent=sent.split()
acro = []
for word in s_sent:
if word not in stopwords:
acro.append( str.upper(word[:2]))
print('. '.join(acro))
输出
WA. EA. AI. AR. VI
另一种简单的方法是引入一个标志来检查第一个值,然后巧妙地附加'. '在最后一个值的末尾。这样你就不会有多余的尾随字符
smart_flag = True
acro = ''
for word in s_sent:
if word not in stopwords:
if smart_flag:
acro=acro+str.upper(word[:2])
smart_flag=False
else:
acro=acro +". " + str.upper(word[:2])
print(acro)
只是为了完整性acro.rstrip(' .'))将删除您传入的任何字符。我的意思是它将删除'. '以及' .'
TA贡献1995条经验 获得超2个赞
这也可以缩短为:
stopwords = ['to', 'a', 'for', 'by', 'an', 'am', 'the', 'so', 'it', 'and', 'The']
sent = "The water earth and air are vital"
acro = '. '.join(word[:2].upper() for word in sent.split() if word not in stopwords)
print(acro)
输出:
WA. EA. AI. AR. VI
更新:
但是,正如@mad_ 指出的那样,join在这种情况下想要创建一个字符串,首先是正确的长度,然后是正确的内容。但是要知道正确的长度,它希望找到要连接的所有组件的长度,因此将列表作为其参数意味着它具有大小,而我对生成器的原始答案直到它已经用尽了。
所以,更好的是:
acro = '. '.join([word[:2].upper() for word in sent.split() if word not in stopwords])
添加回答
举报