所以我是一个菜鸟程序员...不要讨厌我的代码。但我在这里挣扎了一下。我试图获取字符串列表,并找到大写字母数量最少的字符串。
我尝试过几件不同的事情。 - 只计算大写(没有工作) - 删除小写,然后做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)
现在,这只返回列表中最短的第一个字符串
答案 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
会为您提供更丰富的信息,以便您检查关系(以时间和内存复杂性为代价)。