2014-01-29 2 views
0

다소 파이썬/프로그래밍 초보자가 여기 있습니다.튜플 목록에서 튜플의 첫 번째 요소 범위에 액세스하기

튜플 목록에서 지정된 범위의 튜플에 액세스하려고하지만 튜플 범위에서 첫 번째 요소에만 액세스하려고합니다. 지정된 범위는 토큰 화되고 nltk에 의해 태그 지정된 텍스트 문자열에서 찾고자하는 패턴을 기반으로합니다. 내 코드 :

from nltk.tokenize import word_tokenize 
from nltk.tag import pos_tag 

text = "It is pretty good as far as driveway size is concerned, otherwise I would skip it" 
tokenized = word_tokenize(text) 
tagged = pos_tag(tokenized) 

def find_phrase(): 
    counter = -1 
    for tag in tagged: 
     counter += 1 
     if tag[0] == "as" and tagged[counter+6][0] == "concerned": 
      print tagged[counter:counter+7] 

find_phrase() 

인쇄 출력 :

[('as', 'IN'), ('far', 'RB'), ('as', 'IN'), ('driveway', 'NN'), ('size', 'NN'), ('is', 'VBZ'), ('concerned', 'VBN')]

가 실제로 원하는 것은 :

['as', 'far', 'as', 'driveway', 'size', 'is', 'concerned']

얻을 코드 print tagged[counter:counter+7]의 내 라인을 수정 할 수 있나요 내 원하는 인쇄 출력?

+1

은 참고 당신은 아마'사용해야합니다, 자신을 그냥 루프에서 증가 도착 카운터 변수를 작성 찾을 때마다 열거하십시오'대신. – roippi

답변

2

당신은 다음과 같이 사용할 수있는 이름 항목에 대한 또한 항목 [0] :

result, _ = zip(*find_phrase()) 
print result 
+0

잘 작동하지만 어떻게 작동하는지 잘 모릅니다. Zip 나는 잘 알고 있지만, 나는 변수가 후행 쉼표와 밑줄'result, _로 선언되는 것을 본 적이 없다. 거기서 무슨 일이 일어나고 있는지, 아니면 그것에 관한 문서를 가르쳐 주시겠습니까? –

+1

@Darren 그것은 단지 유효한 변수 이름입니다. 일반적인 규칙에 따라 변수 이름을 '_'로 지정하면 '이것을 사용하지 않습니다.'라는 의미입니다. 왼쪽에 두 가지가 어떻게 할당되는지 이해하지 못한다면 "튜플 풀기"를 찾으십시오. – roippi

+0

@roippi 고마워, 이제 알았다. –

3

아마도 가장 간단한 방법은 list comprehension입니다. 튜플 쌍은 항상있는 경우, 당신은 다음 인쇄 (모든 당신이 좋아하는 방법을 사용) 목록을 평평하게 수

print [tup[0] for tup in tagged[counter:counter+7]] 

또는 단지 재미를 위해 :이 문장은 목록에있는 모든 튜플의 첫 번째 요소에서 목록을 만듭니다

print list(sum(tagged[counter:counter+7],()))[::2] 

또는 목록에있는 모든 튜플의 0 번째 인덱스를 검색 할 __getitem__() 메서드를 호출하는 itemgetter 기능과 map을 사용합니다 : 파이썬의 slice 표기의 단계 표기법마다 두 번째 요소

from operator import itemgetter 
print map(itemgetter(0), tagged[counter:counter+7]) 

다른 건 없습니까? 나는 더 많은 것이있을 것이라고 확신한다.

0

우편 번호를 사용해 보셨습니까?

관련 문제