Первый выпуск в вашей программе, является то, что вы инициализацией t
к 0
вне для цикла, следовательно, вы вы только проверить первый элемент b
со всеми элементами, для остальных итераций for
loop, t всегда будет больше len (b), поэтому он никогда не выходит во внутренний цикл, от второй итерации цикла for
. Простое исправление -
for i in b:
t = 0
while t<len(b):
if ''.join(sorted(i))==''.join(sorted(b[t])):
array.append(i)
t+=1
Но для поиска анаграмм, я думаю, что вы чрезмерно усложнять его, вы можете просто найти сумму значений ASCII этих символов строки, а затем сравнить его с другими одинаковые суммы и длины, и проверьте, соответствуют ли обе суммы значения ASCII и длина строки, если они являются анаграммой.
Пример кода для этого метода -
b = ['cat', 'dog', 'god', 'star', 'lap', 'act']
c = list(map(len,b))
d = list(map(lambda x: sum([ord(c) for c in x]), b))
arr= []
for i, s in enumerate(b):
for j, s1 in enumerate(b):
if d[i] == d[j] and c[i] == c[j] and i != j:
if s not in arr:
arr.append(s)
if s1 not in arr:
arr.append(s1)
print(arr)
>> ['cat', 'act', 'dog', 'god']
Вы имеете в виду, что все элементы массива должны быть анаграммами в вашем результате? – shunya