Вы используете функцию split () в этой части:
list1 = [i.split() for i in word_list]
Давайте посмотрим, что документация говорит нам об этой функции:
str.split (sep = Нет, maxsplit = -1)
Возвращает список слов в
строка, используя sep в качестве строки-разделителя. Если дается макссплит, в
большинство разделений maxsplit сделано (таким образом, список будет иметь самое большее
maxsplit + 1 элемент). Если maxsplit не указан или -1, то есть
количество разделений не ограничено (сделаны все возможные разбиения).
Возвращает список, и вы добавили этот список в свой список. Я вижу, что word_list
предназначен для хранения строк слов. Давайте предположим, что word_list
выглядит так:
word_list = ["hello darkness my", "old friend I've", "come to see you", "again"]
Что происходит после list1 = [i.split() for i in word_list]
?
list1 = [i.split() for i in word_list]
print(list1)
Вывод:
[['hello', 'darkness', 'my'], ['old', 'friend', "I've"], ['come', 'to', 'see', 'you'], ['again']]
Как видите, элементы - это отдельные списки. На этой части вашего кода:
for j in list1:
if anagrams( string, j ) == True:
return list1
else:
return []
j
- список, поэтому здесь:
def anagrams( string1, string2 ):
str_1 = string1.lower()
str_2 = string2.lower()
str_2 = string2.lower()
пытается вызвать более низкий метод в списке, который не является допустимым методом для объекта list
, и именно поэтому Python жалуется.
Понимание списка может выглядеть «круто», но часто использование простых циклов улучшает читабельность вашего кода, а в некоторых случаях может даже избежать ошибок, подобных этой. Вот моя альтернатива:
list1 = []
for i in word_list:
for word in i.split():
list1.append(word)
см. Вывод:
print(list1)
['hello', 'darkness', 'my', 'old', 'friend', "I've", 'come', 'to', 'see', 'you', 'again']
Отдельные слова, как вы и хотели.