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



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

我尝试了几种不同的东西。- 只计算大写(不起作用(- 删除小写字母,然后执行 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)

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

为什么不只将min与计算大写字母数量的 lambda 一起使用?

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

您可以使用列表推导来执行此操作:

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

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

def fewest_unsolved(group):
  least = lowercase_count(group[0])
  current = group[0]
  for word in group[1:]:
    count = lowercase_count(word)
    if count < least:
      least = count
      current = word
  return current

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

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

如果你的目标真的总结得很好

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

那么可能

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

(即你的头衔(不会是最好的方法。(这是"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会给你更丰富的信息,让你检查联系(以时间和内存的复杂性为代价(。

最新更新