2013-04-06 3 views
3

을 감안할 때 두 목록 :파이썬에서 2D 목록을 비교하여 동등성을 비교하려면 어떻게해야합니까?

a = [[1,2],[3,4]] 
b = [[1,2],[3,4]] 

내가 compare이되도록 작성합니다 방법 :

compare(a,b) => true 
+5

..'a == b'는 당신의 목적에 봉사하지 않을 것입니까? – DSM

+2

반드시 그렇지는 않습니다. 예를 들어 목록의 요소가 문자열이고 대소 문자를 구분하지 않으려는 경우 또는 실수로 수치 오류에 대한 허용 오차를 원할 경우 '=='가 작동하지 않습니다. 예상 유형에 따라 다릅니다. – DSM

+0

@sdasdadas 질문하기 전에 몇 가지 방법을 시도해보십시오 :) 목록은 파이썬 객체입니다. '=='는 파이썬 객체의 평등을 테스트합니다. 두 개의 일반 목록이 같은지 테스트하는 경우에도 마찬가지입니다. –

답변

10

은 당신이 원하는 수행

>>> a = [[1,2],[3,4]] 
>>> b = [[1,2],[3,4]] 
>>> a == b 
True 

참고 : == 목록이 정렬되지 않은 예입니다 (a에서 통지 순서 및 b에)

>>> a = [[3,4],[1,2]] 
>>> b = [[1,2],[3,4]] 
>>> a == b 
False 

추가 참조를 위해이 질문을 참조하지 않을 때 유용 : How to compare a list of lists/sets in python?

: 감사합니다. ~ @ dr jimbob

정렬 후에 비교하려는 경우 sorted(a)==sorted(b)을 사용할 수 있습니다.
그러나 다시 한 점, c = [[4,3], [2,1]] 경우 sorted(c) == sorted(a) == False 때문에 sorted(c)되는 다른 [[2,1],[4,3]] (하지 심도있는 일종의)이 연결 대답에서 기술을 사용할 필요가 이것에 대한

. 이후 나는 또한 파이썬을 배우고 있기 때문에 :)

+0

마지막 부분이 올바르지 않습니다. 'a.sort()'는'a'를 정하고'None'을 반환합니다. 그러므로'a.sort() == None'은'True'이고,'a.sort() == b.sort()'는'None == None'으로 평가됩니다. 'False'를 시도하십시오; 예를 들어'b = []'라고하자. (None을 체크 할 때'is' 비교를 사용하는 더 좋은 스타일에주의하십시오.) 이제,'sorted (a) == sorted (b)'가 작동합니다. 'a = [[1,2], [3,4]]','b = [[3,4], [1,2]]'와'c = [[4,3] ([1,2],'[2,1]]'이면''(a)''와''sorted (b)'만 같을 것입니다. 둘 다 [[1,2], [3,4] ([[2,1], [4,3]]). –

+0

@drjimbob 감사합니다. 너의 요점이있어. 감사. –

2

간단한 :

또 다른 방법은 익명 함수 만들 lambda을 사용
def compare(a, b): return a == b 

:

compare = lambda a, b: a == b 
관련 문제