Количество букв, которые расположены в строке под тем же номером, что и в алфавите
Есть массив строк. Требуется в каждом из них посчитать количество букв, которые расположены в строке под тем же номером, что и в алфавите:
"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
])