如何仅按字母顺序计算列表中的字母abcdefghijklmnopqrstuvwxyz
而没有Counter
?
例如,输入:
['Bro', 'lo', '27', 'b']
输出
[['b', 1], ['l', 1], ['o', 2], ['r', 1]]
答案 0 :(得分:1)
您可以对str.count
和star.islower
使用列表推导,只需先使用str.join
并对其进行排序:
>>> data = ['Bro', 'lo', '27', 'b']
>>> combined = sorted(''.join(data))
>>> [[l, combined.count(l)] for l in combined if l.islower()]
[['r', 1], ['o', 2], ['l', 1], ['b', 1]]
答案 1 :(得分:0)
尝试一下:
from collections import defaultdict
import string
my_count = defaultdict(int)
my_list = ['Bro', 'lo', '27', 'b']
for list_item in my_list:
for char in list_item:
if char in string.ascii_lowercase:
my_count[char] += 1
print(sorted([(k,v) for k,v in my_count.items()]))
答案 2 :(得分:0)
如果您不想使用Counter()
,则可以遍历所有字母并计数。您可以利用.islower()
来测试字符是否为小写字母,并利用get()
来将计数从0开始:
l = ['Bro', 'lo', '27', 'b']
counts = dict()
for word in l:
for letter in word:
if letter.islower():
counts[letter] = counts.get(letter, 0) + 1
print(list(counts.items()))
# [('r', 1), ('o', 2), ('l', 1), ('b', 1)]
这将是O(n),其中n是字符数。
答案 3 :(得分:0)
尝试一下
letters = 'abcdefghijklmnopqrstuvwxyz'
my_string = "".join(['Bro', 'lo', '27', 'b'])
my_list = list(filter(lambda c: c in letters, set(my_string)))
my_list.sort()
result = {}
for i in my_list:
result[i] = my_string.count(i)
答案 4 :(得分:-1)
有很多不导入任何内容的方法。 如果您没有.count()。
my_list = ['Bro', 'lo', '27', 'b']
letters = "abcdefghijklmnopqrstuvwxyz"
output = []
for letter in letters:
count = 0
for item in ''.join(my_list):
if item == letter:
count += 1
if count > 0:
output.append([letter,count])
print(output)
不使用增量计数器变量。
my_list = ['Bro', 'lo', '27', 'b']
letters = "abcdefghijklmnopqrstuvwxyz"
output = [[letter,''.join(my_list).count(letter)] for letter in letters if ''.join(my_list).count(letter)>0]
print(output)
答案 5 :(得分:-2)
以下代码段完全按照要求运行,但使用的是JavaScript。
编辑:是的,这在地图中使用了一个计数器
function CountLetters(words){
var min = "a".charCodeAt(0);
var max = "z".charCodeAt(0);
var letters = new Map();
for(let word of words){
for(let letter of word){
let charCode = letter.charCodeAt(0);
var boundsOk = charCode >= min && charCode <= max;
if(!boundsOk){
continue;
}
if(!letters.has(letter)){
letters.set(letter,0);
}
letters.set(letter, letters.get(letter) + 1);
}
}
return Array.from(letters).sort(function(a,b){
return a[0].charCodeAt(0) - b[0].charCodeAt(0)
});
}
console.log(CountLetters(['Bro', 'lo', '27', 'b']));