2011-11-19 2 views
4

, 당신은 대괄호 슬라이스 구문 내에서 불평등의 어떤 종류를 사용할 수 있습니다 : 일반 파이썬 데이터 구조 내에서 해당 구문 어떤 종류의목록/튜플 슬라이스 구문 내에서 파이썬 내에서 어떤 종류의 표현식 평가가 있습니까? NumPy와 배열에

>>>arr = numpy.array([1,2,3]) 
>>>arr[arr>=2] 
array([2, 3]) 

가?

>>>lis = [1,2,3] 
>>>lis[lis > 2] 
2 

대신 어떤 종류의 예외, 나는 많은 이해가되지 않습니다 2의 반환 값을 얻을 : 내가 시도 할 때 오류가 발생합니다 것으로 예상.

p.s. 이 문법에 대한 문서를 전혀 찾을 수 없기 때문에, 누군가가 저를 가리켜 줄 수 있고, 규칙적인 파이썬 (존재한다면)이 좋을 것이라고 지적 할 수 있다면.

+1

내가 더 NumPy와 지식 옆에있는,하지만 난 행동을 생각한다 (1) 다른 모든 것과 마찬가지로 비교를 방송 할 수 있고 결과적으로 'bool' 배열이 생기고 (2) bool 배열을 색인으로 사용할 수 있습니다 (http : /numpy.org/). – delnan

+0

'numpy.array'는 배열의 인덱스로 사용할 수있는 특수한 객체를 반환하는'int'와 비교를 정의합니다. 그런 다음 배열 유형은이 객체에서 비교 유형 및 피연산자를 추출하고 요소가 일치하는 새 배열을 반환합니다. – yak

답변

7

파이썬 2.x에서 lis > 2True을 반환합니다. 이는 피연산자의 유형이 다르며 이러한 두 유형에 대해 정의 된 비교 연산자가 없으므로 알파벳 순서 ("list" > "int")로 클래스 이름을 비교하기 때문입니다. True1과 같으므로 색인 1의 항목을 가져옵니다.

이 표현식은 오류를 줄 것입니다 (훨씬 덜 놀라운 결과).

[x for x in lis if x > 2] 
1

사용 지능형리스트 :

 
TypeError: unorderable types: list() > int() 

당신이 목록 이해 사용해야하고 싶은 일을하려면

[a for a in lis if a>=2] 
관련 문제