Это сравнение списка в Python не нужно?
Решение для подсчета и сравнения анаграмм, предоставленное на сайте http://interactivepython.org/, проверяет списки для окончательной проверки времени, если счет для каждого значения ASCII одинаков.
j = 0
stillOK = True
while j<26 and stillOK:
if c1[j]==c2[j]:
j = j + 1
else:
stillOK = False
return stillOK
Почему бы не использовать оператор сравнения?
return (c1 == c2)
Полный код:
def anagramSolution4(s1,s2):
c1 = [0]*26
c2 = [0]*26
for i in range(len(s1)):
pos = ord(s1[i])-ord('a')
c1[pos] = c1[pos] + 1
for i in range(len(s2)):
pos = ord(s2[i])-ord('a')
c2[pos] = c2[pos] + 1
j = 0
stillOK = True
while j<26 and stillOK:
if c1[j]==c2[j]:
j = j + 1
else:
stillOK = False
return stillOK
print(anagramSolution4('apple','pleap'))
Отредактировано, чтобы добавить:
Я проверил с:
anagramSolution4('abc','cba') #returns True
anagramSolution4('abc','cbd') #returns False
anagramSolution4('abc','cbah') #returns False
... они все проходят. Что будет подходящим тестом, чтобы показать, что c1==c2 терпит неудачу?
1 ответ
С помощью ==
В обоих списках результат будет одинаковым, но также будут скрыты некоторые детали реализации. Учитывая, что скрипт взят с веб-сайта, используемого для обучения, я думаю, что это для целей обучения.
Кроме того, я вижу, что на веб-странице вам задают несколько вопросов о сложностях. Ну, используя c1 == c2
вместо этого цикл, вероятно, ввел бы в заблуждение некоторых людей и заставил бы их думать, что операция - это O(1) вместо O (min (len (c1), len (c2)))[1].
Наконец, обратите внимание, что есть много языков, которые не имеют представления о списках.
[1] Это также не обязательно верно, так как два списка могут содержать элементы с пользовательскими и сложными __eq__()
методы.