Python - 从字符串列表中删除小写或大写字母?

时间:2017-04-11 20:34:33

标签: python list strip

所以我是一个菜鸟程序员...不要讨厌我的代码。但我在这里挣扎了一下。我试图获取字符串列表,并找到大写字母数量最少的字符串。

我尝试过几件不同的事情。 - 只计算大写(没有工作) - 删除小写,然后做min(list,key = len),但这也没有用。

我被困......这是我现在所得到的。

 test_set = {'MOo', 'QHue', 'ReP', 'XiIV', 'oEe'}

 def fewest_unsolved(group):
     #shortest = min(group, key = len)
     #return shortest

     for word in group:

         for i in word:
             if i == i.lower():
                 word.strip(i)
             shortest = min(group, key = len)
             return shortest   

fewest_unsolved(test_set)

现在,这只返回列表中最短的第一个字符串

3 个答案:

答案 0 :(得分:1)

为什么不仅使用min和一个计算大写数量的lambda?

>>> data = {'MOo', 'QHue', 'ReP', 'XiIV', 'oEe'}
>>> min(data, key = lambda x: sum('A' <= c <= 'Z' for c in x))
'oEe'

答案 1 :(得分:1)

您可以使用列表解析来执行此操作:

 Import-Module 'C:\tools\poshgit\dahlbyk-posh-git-a4faccd\src\posh-git.psd1'

知道小写单词的数量,然后您可以执行以下操作:

def lowercase_count(word):
  lowercase = [c for c in word if c.islower()]
  return len(lowercase)

这比其他一些解决方案更冗长,但我认为它可能更具可读性:)

哦,顺便说一下,如果你把它传给一个空列表就会崩溃,所以如果你使用它就要小心。

答案 2 :(得分:0)

如果你的目标真的很好地总结了

  

我正在尝试获取字符串列表,并找到大写字母数量最少的字符串。

然后可能

  

从字符串列表中删除大写或小写字母

(即你的头衔)不是最好的方式。 (这是“X-Y问题”的一个例子。)

这将做前者(但不是后者):

>>> test_set = {'MOo', 'QHue', 'ReP', 'XiIV', 'oEe'}
>>> ranked = sorted([sum('A'<=c<='Z' for c in s), s] for s in test_set) 
>>> print(ranked)
[[1, 'oEe'], [2, 'MOo'], [2, 'QHue'], [2, 'ReP'], [3, 'XiIV']]

您可以看到ranked[0][1]是最小的字符串,ranked[-1][1]字符串最大的字符串。您可以直接使用min()代替sorted()来获取最小数字字符串

>>> capcount, string = min( [sum('A'<=c<='Z' for c in s), s] for s in test_set )

但我认为使用sorted会为您提供更丰富的信息,以便您检查关系(以时间和内存复杂性为代价)。