Проверка, находится ли буква в строке в той же позиции в другой строке (python)

#python #string #for-loop #nested

#python #строка #for-цикл #вложенный

Вопрос:

У меня есть список из шести слов:

 words = ['alone', 'algae', 'caper', 'plane', 'flyer', 'tooth']
  

и я хочу проверить, находится ли буква в слове в том же месте в любом другом слове. Например, «a» — это первая буква в alone и первая буква в algays, так что это будет совпадение. Однако «e» является пятой буквой в plane и четвертой буквой в flyer, так что это не будет совпадать. Затем я хотел бы подсчитать, сколько совпадений у меня всего.

Есть ли лучший способ сделать это, чем перебирать каждую букву в каждом слове и проверять, появляется ли эта буква в том же месте в другом слове? В настоящее время у меня есть этот код:

 match_cnt = 0
for i in words:
    for index, j in enumerate(i):
        for k in range(len(words)):
            if j == words[i][index]:
                match_cnt  = 1 
  

Комментарии:

1. вы используете i дважды специально? Похоже, что в вашем случае это не проблема, но это делает код запутанным. Также кажется, что ваш код каждый раз повторяет весь список, тогда как вы можете сэкономить на итерациях, только просматривая «вперед», поскольку любое совпадение из ранее проверенных работ будет уже учтено

2. Что вы подразумеваете под ожиданием? Также, да, я не заметил дубликат i, спасибо, что указали на это.

3. Я имею в виду, что когда вы просматриваете все буквы ‘alone’, вам придется просматривать все другие слова, но когда вы проверяете буквы в ‘algays’, вам больше не нужно возвращаться и проверять ‘alone’ снова. Вы можете добиться этого, запустив свой второй цикл ( k как кажется сейчас) с i индекса 1, а не 0.

Ответ №1:

Если ваши слова будут иметь одинаковую длину, вы можете использовать zip. Мое однострочное решение без индексации:

 match_cnt = sum(sum(1 for x in e if e.count(x)>1)for e in zip(*words))
  

Он будет считать все символы, которые появляются минимум дважды в одном и том же индексе.