Строка и подстроки - PullRequest
       9

Строка и подстроки

0 голосов
/ 20 апреля 2020

Параметр a представляет собой список строк без дубликатов. Функция возвращает True, если в a есть пара элементов, где один из элементов является подстрокой другого. В противном случае функция возвращает False.

sub( ['c', 'd', 'ee', 'f'] ): False
sub( ['c', 'd', 'ec', 'd'] ): True
def sub(a):
    for word in a:
        for ch in word:
            if ch in word:
                return True
    return False

Как бы я закодировал это, используя double для l oop?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Вы можете получить тот же эффект, используя any() и понимание генератора.

>>> sub = lambda a: any((w1 is not w2 and w1 in w2) for w1 in a for w2 in a)
>>>
>>> sub( ['c', 'd', 'ee', 'f'] )
False
>>> sub( ['c', 'd', 'ec', 'd'] )
True

Аналогично, итерация в пределах any() останавливается на первом True значении.

w1 is not w2 может быть лучшим способом избежать выражения, оцениваемого в True, когда тот же объект сравнивается с самим собой, чем w1 != w2.

0 голосов
/ 20 апреля 2020

Это не работает, потому что ch всегда в word, в конце концов ch пришло от word! Похоже, вы хотели два для цикла, один для выбора слов, а другой для выбора слов для поиска.

def sub(a):
    for word in a:
        for other_word in a:
            if word in other_word and word != other_word:
                return True
    return False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...