仅计算列表中的字母abcdefghijklmnopqrstuvwxyz

时间:2019-11-18 22:00:46

标签: python python-3.x

如何仅按字母顺序计算列表中的字母abcdefghijklmnopqrstuvwxyz而没有Counter

例如,输入:

['Bro', 'lo', '27', 'b']

输出

[['b', 1], ['l', 1], ['o', 2], ['r', 1]]

6 个答案:

答案 0 :(得分:1)

您可以对str.countstar.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']));