Поиск, содержит ли список слов обратное слово - PullRequest
1 голос
/ 29 марта 2020

Учитывая список, такой как

['table', 'drawer', 'chair', 'reward', 'radar']

Как бы вы сделали функцию / for-l oop, чтобы возвращать список слов, которые имеют обратный список? Я пытаюсь включить только первый экземпляр данного слова

Таким образом, результат будет:

['drawer', 'radar']

, а не

['drawer','reward', 'radar']

Мой код пока возвращает последний результат:

def find_reversals(lst):

    emptylst = []
    match = []

    for word in lst:
        new = word[::-1]
        emptylst.append(new)

    for i in lst:
        for j in emptylst:
            if i == j:
                match.append(i)

    print('{}'.format(match))

Ответы [ 3 ]

4 голосов
/ 29 марта 2020

Вы можете сделать следующее:

lst = ['table', 'drawer', 'chair', 'reward', 'radar']
s = set(lst)

result = []
for word in lst:
    reverse = word[::-1]
    if reverse in s:
        result.append(word)
    s.remove(word)

print(result)

Вывод

['drawer', 'radar']

Поскольку для этого используется набор, сложность составляет O(n), где n количество элементов в списке.

1 голос
/ 29 марта 2020

Вы можете перебирать список с двумя индексами, i и j, где j начинается с i (если вы хотите, чтобы палиндромы считали)

found = set()
a = ['table', 'drawer', 'chair', 'reward', 'radar']
ret = []
for i in range(len(a)): 
    for j in range(i, len(a)): 
       if a[j][::-1] == a[i]: 
           word = ''.join(sorted(a[i])) 
           if word not in found: 
               found.add(word) 
               ret.append(a[i])

# ret = ['drawer', 'radar']

Причина Ваш двойной счет, потому что вы не отслеживаете, было ли что-то найдено. В этом случае я отслеживаю его через set и отсортированный порядок этого слова.

0 голосов
/ 29 марта 2020

Вот решение без множеств и множественных циклов for:

lst = ['table', 'drawer', 'chair', 'reward', 'radar']
result = []

for e in lst:
    new_word = e[::-1]    #Make a reverse of a word
    if new_word in lst:
        if e not in result and e[::-1] not in result:    #Check if the word, or a reversed word is in the list, and if not, put it in a list
            result.append(e)

print(result)
...