2016-11-11 4 views
0

마크 로프 체인을 사용하여 임의의 문장 생성기를 작성하려고하지만 파일의 각 단어 뒤에 오는 단어 목록을 작성할 때 문제가 발생합니다. 내가 사용하려고했던 코드는 다음과 같은파일의 각 단어 다음에 오는 모든 단어의 목록을 작성하려면 어떻게합니까?

word_list = [spot+1 for spot in words if spot == word] 

내가 시도 변동 :

TypeError: Can't convert 'int' object to str implicitly 

방법 :

word_list = [words[spot+1] for spot in words if spot == word] 

그러나 때마다, 나는 오류 주어진 단어를 따르는 목록에 단어를 제대로 추가 할 수 있습니까? 나는 생각지 못하는 이것에 대한 명백한 해결책이있는 것처럼 느껴집니다.

+0

는'문자열을 spot'입니까? 만약 그렇다면, 당신은 그것에 '1'을 추가하여 무엇을 달성하려고합니까? – n1c9

+0

스팟은 문자열이고 목록에 나오는 단어를 얻기 위해 1을 더하고 있습니다. – nalydttirrem

+2

그냥 목록에있는 위치의 색인이 아니라 문자열에 1을 더하도록 지시하는 것입니다. 그래서'word = list '='words = list '='words '='word '가'word '가 두 번 이상 나오면 작동하지 않는' – n1c9

답변

1

트릭은 오히려 개별 단어보다 쌍을 반복하는 것입니다

words = ['the', 'enemy', 'of', 'my', 'enemy', 'is', 'my', 'friend'] 
word = 'my' 

[next_word for this_word, next_word in zip(words, words[1:]) if this_word == word] 

결과 :

['enemy', 'friend'] 

이 방법은 파이썬의 zip() 기능, 슬라이스에 의존합니다.

>>> list(zip(words, words[1:])) 
[('The', 'enemy'), 
('enemy', 'of'), 
('of', 'my'), 
('my', 'enemy'), 
('enemy', 'is'), 
('is', 'my'), 
('my', 'friend')] 
: 당신이 그것을 원래 words를 압축 할 때, 당신은 쌍의 목록을 얻을 수 있도록 ...

>>> words[1:] 
['enemy', 'of', 'my', 'enemy', 'is', 'my', 'friend'] 

:

words[1:]

은 첫 번째 놓치고 words의 복사본입니다

일단 당신이 그것을 얻으면, 첫 단어가 당신이 찾고있는 단어라면 목록 작성은 각 쌍의 두 번째 단어를 돌려 주면됩니다 :

0 1,235,

결과 :

['of', 'is']