Количество букв, которые расположены в строке под тем же номером, что и в алфавите

Есть массив строк. Требуется в каждом из них посчитать количество букв, которые расположены в строке под тем же номером, что и в алфавите:

"IAMDEFANDJKL"
    ↓↓↓   ↓↓↓
"ABCDEFGHIJKLMNO...

>>> 6

Надо что бы было [6, 5, 7], а выводит [7, 3, 7]

ewe = ["IAMDEFANDJKL","thedefgh","xyzDEFghijabc"]
def solve(arr):
    a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    b = a.lower()
    count = 0
    arr = " ".join(arr)
    arr = arr.lower()
    arr = arr.split()
    k = 0
    qweq = []
    for i in arr:
        for z in i:
            k = i.find(z)+1
            if k == b.find(z)+1:
                count += 1
        qweq.append(count)
        count = 0
    print(qweq)

solve(ewe)

Ответы (5 шт):

Автор решения: OPTIMUS PRIME

Можно перебирать буквы в слове и сопоставить их к «алфавитной» строке по индексу:

x = ["IAMDEFANDJKL","thedefgh","xyzDEFghijabc"]

def solve(arr):
    alphabet = "abcdefghijklmnopqrstuvwxyz"

    result = [0] * len(arr)

    for i, word in enumerate(arr):
        for j, letter in enumerate(word):
            if letter.lower() == alphabet[j]: # <--
                result[i] += 1

    return result

print( solve(x) ) # [6, 5, 7]
→ Ссылка
Автор решения: MBo

Чтобы не приходилось ничего искать:

ewe = ["IAMDEFANDJKL","thedefgh","xyzDEFghijabc"]
for s in ewe:
    ss = s.upper()
    count = 0
    for i in range(len(ss)):
       if ord(ss[i]) - ord('A') == i:
         count += 1
    print(count)
    
6
5
7
→ Ссылка
Автор решения: splash58

enumerate собет пары - позиция, значение. Остается посмотреть, сколько пересечений с алфавитом

a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
A = set(enumerate(a))

def f(t):
    t = set(enumerate(t.upper()))
    return len(A & t)


ewe = ["IAMDEFANDJKL", "thedefgh", "xyzDEFghijabc"]
print(list(map(f, ewe)))
# [6, 5, 7]
→ Ссылка
Автор решения: CrazyElf

Однострочник для разнообразия. По сути тоже самое решение, что у MBo:

ewe = ["IAMDEFANDJKL","thedefgh","xyzDEFghijabc"]
print([sum(ord(c) == ord('A') + i for i,c in enumerate(w.upper())) for w in ewe])

Вывод:

[6, 5, 7]
→ Ссылка
Автор решения: Stanislav Volodarskiy

Решение без индексов. Применим zip к строке и алфавиту, отфильтруем по равенству букв, посчитаем длину генератора. У генератора нет длины, сложим единицы по количеству элементов генератора:

import string

ewe = ('IAMDEFANDJKL', 'thedefgh', 'xyzDEFghijabc')
print([
    sum(
        1
        for a, b in zip(w.lower(), string.ascii_lowercase)
        if a == b
    ) for w in ewe
])
→ Ссылка