2013-10-04 4 views
0
def sucontain(A): 
    C = A.split() 
    def magic(x): 
     B = [C[i]==C[i+1] for i in range(len(C)-1)] 
     return any(B) 
    N = [x for x in C if magic(x)] 
    return N 
Phrase = "So flee fleeting candy can and bandage" 
print (sucontain(Phrase)) 

Цель этой функции - создать список слов, которые находятся внутри каждого последующего слова. Например, функция возьмет строку «« Так бегут мимолетные конфеты и бандаж »в качестве входных и возвращаемых [« беги »,« и »], потому что бег внутри мимолетно (следующее слово) и« и »находится внутри« повязки », Если ничего подобного не найдено, должен быть возвращен пустой список []. Мой код прямо сейчас возвращает [] вместо ['flee', 'and']. Может кто-то указать, что я делаю неправильно? выПоиск слов, которые находятся внутри последовательных слов

+0

Что делает ваша функция 'magic'? Я имею в виду, можете ли вы объяснить это своими словами? –

+0

волшебная функция должна проверять индекс C (слово в списке) и проверять последовательное слово (C [i + 1] в диапазоне длины C (в данном случае длина 7, поэтому диапазон (0,7), затем возвращает любой истинный случай, который затем должен быть преобразован в те слова, которые были истинными. – user2847306

+0

Ваша магическая функция проверяет _equality_, а не 'C [i]' _in_ 'C [i + 1]'. Это то, что вы делаете неправильно. –

ответ

2

Существует определенно что-то не так с вашей magic функцией Он принимает x в качестве аргумента, но не использовать его в любом месте

Вот альтернативный вариант, который не использует дополнительную функцию:..

def sucontain(A): 
    C = A.split() 
    return [w for i, w in enumerate(C[:-1]) if w in C[i+1]] 

Функция enumerate() позволяет нам контактировать индексы и значения вместе, что делает его очень прямым для проведения теста. C[i+1] - следующее значение, а w - текущее значение, поэтому w in C[i+1] проверяет, содержится ли текущее значение в следующем значении. Мы используем C[:-1], чтобы убедиться, что мы остановили один из них до последнего элемента, иначе C[i+1] приведет к индексированию IndexError.

7

Просто пару последовательных слов, то становится легко список понимания ...

>>> s = "So flee fleeting candy can and bandage" 
>>> words = s.split() 
>>> [i for i, k in zip(words, words[1:]) if i in k] 
['flee', 'and'] 
0

Забегая вперед может быть проблематичным. Вместо того, чтобы проверить, находится ли текущее слово в следующем, проверьте, находится ли текущее слово. Это почти всегда делает вещи проще.

Кроме того, используйте описательные имена переменных вместо C и A и x и B и N и magic.

def succotash(text): # okay, so that isn't very descriptive 
    lastword = " "  # space won't ever be in a word 
    results = [] 
    for currentword in text.split(): 
     if lastword in currentword: 
      results.append(currentword) 
     lastword = currentword 
    return results 

print succotash("So flee fleeting candy can and bandage") 
Смежные вопросы