파이썬(python)에서의 문자열 비교에 대한 간단한 예제 코드이다.


#-*- coding: utf-8 -*-


from operator import eq  # 문자열 비교를 위한 함수 eq 추가


chk = "joe7"


if chk == "joe":

    print "같다."

else:

    print "다르다."


위의 코드는 C style 언어들의 보편적인 비교 법이다. 

그런데 Java에서는 저런식으로 비교가 안된다는 약간이 당황스러움.

말이 나온김에 Java의 문자열 비교를 보자면

if (chk.equals("joe")) { ... }와 같이 해야 한다.


위 코드 실행 결과는 당연히 "다르다"가 출력될 것이다.

이번에는 문자열 비교 함수 eq()를 이용한 방식이다.


아래 코드에서 eq(chk, "joe")는 괄호 안의 2개의 매개인자가 같으면 true, 아니면 false가 된다.

결과는 당연히 "다름"이 출력된다.


if eq(chk, "joe"): 

    print "같음"

else:

    print "다름"


다음으로 문자열 비교에서 매우 유용하게 사용되는 특정 문자를 "포함하고 있는지"에 대한 파이썬에서의 용법이다.

find()라는 메소드를 활용하면 된다. find()메소의 syntax는 다음과 같다.


str.find(s, beg=0, end=len(str))


str이라는 문자열에서 문자열 s가 발견 되어지면 발견되어진 위치 값(index값)을 반환한다.

만일 발견되지 않으면 -1을 반환한다. 이때 문자열의 index는 0부터 시작한다.


beg : 문자열 str에서 s라는 문자열을 찾을 때 시작 Index 값이다. 지정하지 않으면 default로 0가 지정된다.


end : 문자열 str에서 s라는 문자열을 찾을 때 종료될 index 값이다. 지정하지 않으면 문자열 str의 length 값이 지정된다.


예를들어


str = "<EOF>"가 있다면 

index 0 : <

index 1 : E

index 2 : O

index 3 : F

index 4 : >

가 된다.


print str.find("EOF")를 하면 1이 반환된다.

print str.find("<EOF>")를 하면 0이 반환된다.

print str.find("efgh")를 하면 -1이 반환된다.

print str.find("OF")를 하면 2가 반환된다.

print str.find("F")를 하면 3이 반환된다.

print str.find("OF>")를 하면 2가 반환된다. OF>라는 전체 문자열이 str에서 발견되기 때문이다.

print str.find("OF)")를 하면 -1이 반환된다. OF까지는 문자가 포함되어 있지만 OF)라는 문자는 포함되어 있지 않기 때문이다. 


info = "Hello world<EOF>"

print info.find(str)를 하면 11이 반환된다.


print info.find(str, 5)를 하면 str을 찾는 위치를 5위치에서 찾지만 반환은 전체 위치에서의 index값을 반환하므로 11이 반환된다.


print info.find(str, 5, 7)를 하면 str을 info에서 찾을 때 시작 위치를 5에서 시작해서 7위치까지만 찾으므로 str이 발견되지 않는다. 따라서 -1이 반환된다.


아무튼 python에서 java의 contains()와 같은 기능을 find()를 이용해서 할수 있다는 얘기다.

java의 contains()와는 약간 개념이 다르지만 -1이 아니면 해당 문자열을 포함하고 있는 것이 되는 것이다. 예를 들어 data라는 변수에 소켓통신으로부터 데이터를 읽었을 경우 data "EOF"라는 문자열이 포함되어 있다면 소켓통신의 읽기 작업을 종료하는 코드를 작성할려면 다음과 같이 하면된다.


if data.find("EOF") != -1 :

    print "OK, Job completed"

    break;


과 같이하면 될 것이다.




+ Recent posts