我的问题是:如何删除列表中元素的字符串中的所有小写单词?例如,如果我有此列表:s = ["Johnny and Annie.", "She and I."]
我需要写什么才能让python返回newlist = ["Johnny Annie", "She I"]
我试过这个,但遗憾的是不行:
def test(something):
newlist = re.split("[.]", something)
newlist = newlist.translate(None, string.ascii_lowercase)
for e in newlist:
e = e.translate(None, string.ascii_lowercase)
答案 0 :(得分:1)
遍历列表中的元素并消除小写字母。
s = s = ["Johnny and Annie.", "She and I."]
for i in s:
no_lowercase = ' '.join([word for word in i.split(' ') if not word.islower()])
print(no_lowercase)
答案 1 :(得分:0)
>>> s = ["Johnny and Annie.", "She and I."]
您可以使用islower()
检查该单词是否为小写,并使用split
逐字迭代。
>>> [' '.join(word for word in i.split() if not word.islower()) for i in s]
['Johnny Annie.', 'She I.']
同时删除标点符号
>>> import string
>>> [' '.join(word.strip(string.punctuation) for word in i.split() if not word.islower()) for i in s]
['Johnny Annie', 'She I']
答案 2 :(得分:0)
翻译不是正确的工具。你可以用循环来做到这一点:
newlist = []
for elem in s:
newlist.append(' '.join(x for x in elem.split(' ') if x.lower() == x))
答案 3 :(得分:0)
如果你只想要以大写字母开头的单词,请filter
使用str.title
:
from string import punctuation
s = ["Johnny and Annie.", "She and I."]
print([" ".join(filter(str.istitle,x.translate(None,punctuation).split(" "))) for x in s])
['Johnny Annie', 'She I']
或者使用lambda而不是x.isupper删除所有小写单词:
[" ".join(filter(lambda x: not x.isupper(),x.translate(None,punctuation).split(" "))) for x in s]