2012-03-11 3 views

답변

6

매우 간단한 작업과 여러 가지 방법으로 처리 할 수 ​​있습니다. 흥미 진진한! 아마 그렇지 않으면

b = word in (wordList[:1] + wordList[2:]) 

나는 것 :

당신이 확실히 알고있는 경우에 단어 목록은 (다른 너무 비효율적 일 수 있음) 나는이 하나를 사용하는 것이 좋습니다 작다는 사실을 : 여기에 내가 무슨 생각입니다 (여전히, 그것은 달려!)이 갈 : 예를 들어

b = word in (w for i, w in enumerate(wordList) if i != 1) 

, 여러 인덱스를 무시하려는 경우 :

ignore = frozenset([5, 17]) 
b = word in (w for i, w in enumerate(wordList) if i not in ignore) 

이것은 파이썬이며 비늘입니다.

### Constructing a tuple ad-hoc. Easy to read/understand, but doesn't scale. 
# Note lack of index 1. 
b = word in (wordList[0], wordList[2], wordList[3], wordList[4]) 

### Playing around with iterators. Scales, but rather hard to understand. 
from itertools import chain, islice 
b = word in chain(islice(wordList, None, 1), islice(wordList, 2, None)) 

### More efficient, if condition is to be evaluated many times in a loop. 
from itertools import chain 
words = frozenset(chain(wordList[:1], wordList[2:])) 
b = word in words 
+0

나는 frozenset() 메서드를 사용하여 종료했습니다. 감사합니다! 원래의 방식대로 목록을 작성했기 때문에 오류가 발생했지만 완벽하게 작동합니다! – Sam

7
word in wordList 

또는 먼저 4를 확인하려는 경우,

word in wordList[:4] 
+0

"word in wordList"와 같은 것을 원했지만 두 번째 요소는 무시하고 싶습니다. – Sam

+0

@Sam :'word wordList [0] + wordList [2 :]'는 가장 succint 방식입니다. 새로운 목록 객체를 생성한다는 사실을 명심하십시오. 목록이 비싸면 반복하는 것이 좋습니다. 그러나 요소를 건너 뛰고 있다는 사실은 각 색인에서 의미가 있음을 나타냅니다. 왜 다른 컬렉션 유형을 사용하지 않습니까? 'namedtuple'? '__contains__'을 가진 커스텀 클래스? – Daenyth

+0

감사합니다, Daenyth! 저는 아직이 언어에 익숙하지 않지만 구조를 만드는 방법을 모색해야합니다. – Sam

1

indexList에 확인할 표시의 목록 (예 : [0,2,3])을 사용하고 확인하려는 단어를 모두 wordList로 지정하십시오. 그런 다음, 다음 명령은 목록으로, 0 번째, 2, 및 단어 목록의 3 요소를 반환합니다 : 이것은 [wordList[0], wordList[2], wordList[3]]를 반환합니다

[wordList[i] for i in indexList] 

.

관련 문제