【问题标题】:Python - Removing lower or upper case letters from a list of strings?Python - 从字符串列表中删除小写或大写字母?
【发布时间】:2017-04-11 20:34:33
【问题描述】:

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

我尝试了几种不同的方法。 - 只计算大写(没用) - 删除小写,然后做 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)

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

【问题讨论】:

  • strip() 从字符串的开头和结尾删除字符,我认为它不会像您认为的那样。
  • 是的,我忘记了,直到我尝试了几次哈哈。

标签: python list strip


【解决方案1】:

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

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

【讨论】:

  • 哦,好吧。还没学过 lambda。但我会多读一些。这是最简单的方法吗?
  • 是的。而 lambda 只是另一种形式的函数 - 您可以声明具有相同功能的函数 f 并传递它而不是 lambda。
【解决方案2】:

您可以使用列表推导来做到这一点:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    那么可能

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

    (即您的标题)不会是最好的方法。 (这是“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 会为您提供更丰富的信息,让您可以检查联系(以时间和内存复杂性为代价)。

    【讨论】:

    • 是的,删除它们可能不是最好的方法。我想我只是把我的问题的标题写错了......对不起
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    相关资源
    最近更新 更多