Python如何从列表中的字符串中删除小写单词

时间:2014-11-05 18:21:12

标签: python string list lowercase

我的问题是:如何删除列表中元素的字符串中的所有小写单词?例如,如果我有此列表: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)

4 个答案:

答案 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]