ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • python for, while 조건문 특별한 다루기
    case Computer :/Python 2022. 1. 21. 18:50


    for문과 while문에 대해서 많이 사용되는 내용으로 정리합니다.

    그리고 python에서 do while 문이 없고 없이 while문 있습니다.

     

    python에서는 불필요하게 생각하는 부분이 몇몇있습니다. 

    예를 들면 a++, 또는 a-- 같은 수식이 없다. 이는 a += 1 로 충분이 대처 가능하기때문에 해당 수식에 대해서 구현이 안되어있다.

    이와 비슷하게 do while에 대한것도 없다. 코드로 충분히 do while을 구현 할수 있기때문입니다.

     

    기본적인 사용법의 경우에 인터넷에 많이 나와 있기때문에 여기에서는 실제 많이 사용되는 특수한 방법들에 대해 공유드립니다.

    그리고 for와 while문의 경우 반복한다라는 의미는 동일하기 때문에 무엇을 이용하듯 상관없다. 
    보통 for문의 경우 개수가 정해진 내용을 처리할때 많이 사용되고

    while문의 개수를 정확히는 알수없거나 모르때 사용한다. 
    그렇다고 해서 꼭 for만 사용하거나 while만 사용하거나 하지 않는다 둘다 가능하다. 
    사용은 본인이 더 편한하다고 생각되거나 코드 퀄리티가 좋아지는 것을 사용하면 됩니다.

     

    1. for문 으로 바로 List 변수 만들기

    for문을 통해 필요한 정보를 간략하게 작성하여 필요한 정보를 모을때 굉장히 편리하다.

    이 방법은 편리하기도 하지만 너무 복잡하게 사용한다면 가독성이 떨어 질수 있기 때문에 상황에 따라 맞춰 쓰는것을 추천한다.

    names = ["아이유", "이지은", "이지금", "이지동", "징짱", "유애나"]
    
    # '이' 라는 글자로 시작되는 항목만 가져오기
    name_lee = [ name for name in names if name.startswith("이") ]
    print( name_lee )
    > ['이지은', '이지금', '이지동']
    
    # 위에 내용을 원래 기본 for 형태 풀어쓰게되면 아래와 같다
    name_lee = []
    for name in names:
    	if name.startswith("이"):
    		name_lee.append(name)
    
    # 응용하기
    names_info = [
    	{"name": "아이유", "flag":True}, 
    	{"name": "이지은", "flag":True},
    	{"name": "박보영", "flag":False},
    	{"name": "징짱", "flag":True},
    ]
    
    # 응용 1
    # for문 뒤에 오는 if문
    only_dlwldms = [ info['name'] for info in names_info if info['flag'] ]
    print( only_dlwldms )
    > ['아이유', '이지은', '징짱']
    
    # 응용 2
    # for문 앞에 오는 if문
    yes_no = [ "YES" if info['flag'] else "NO" for info in names_info ]
    print( yes_no )
    > ['YES', 'YES', 'NO', 'YES']
    
    # 응용 3 - 이렇게 가독성 떨어지는 코드는 주석을 많이 달던가 혹은 풀어서 작성 하도록 하자
    # 한달후에 본인이 다시 코드를 보게 될때 한줄가지고 복호화 하듯 해석이 오래 걸린다. 이런건 비추천이다
    # 그저 가능하다라는걸 알려주려고 작성한 코드이다.
    yes_no = "".join(map(str, [ 1 if info['flag'] else 0 for info in names_info if '박' in info['name'] or info['flag']]))
    print(yes_no)
    > 1101

     

    2. whlie로 do while 구현

    while 의 조건문을 무조건 True로 두고 조건문을 while문 하단으로 이동시키면 된다.

    그리고 do while에는 break 조건부분을 항상 조심해야 합니다.

    잘못하면 무한루프에 빠지게 되기때문에 조건을 항상 잘 확인합니다.

    # while문을 통해 Flag가 False 인 항목 찾기
    
    names_info = [
    	{"name": "아이유", "flag":True}, 
    	{"name": "이지은", "flag":True},
    	{"name": "박보영", "flag":False},
    	{"name": "징짱", "flag":True},
    ]
    
    # 첫번째 평범한 while문
    idx = 0
    while names_info[idx]['flag']:
        idx += 1
    
    print("X Man:", names_info[idx]['name'])
    > X Man: 박보영
    
    # 두번째 do while문
    idx = 0
    while True:
        if not names_info[idx]['flag']: break
        idx += 1
    
    print("X Man:", names_info[idx]['name'])
    > X Man: 박보영

     

    * 알고 있으면 좋은 내용

    python에서는 Sequences 라는 Object type이 있다. Sequences 의 대표는 List 입니다.

    시퀀스는 의미대로 순서가 있는.. 연속하는 데이터 타입입니다.

    List외에 tuple과 string, range 입니다. 그렇기 때문에 단순 String으로 for 문에 사용가능합니다.
    Sequence Types 종류 참조

    List, string, tuple는 정확히 mutable Sequences 입니다. 즉 가변적으로 내용물의 개수를 변화 시킬수 있습니다.

    range는 immutable Sequences 입니다. 불가변적으로 한번 정의 되면 개수의 변화가 불가능합니다.

     

    이렇게 보면 Dictionary 타입도 sequences 아닌가 라는 생각이 들지만 Sequence 타입은 아닙니다.
    대신 dictionary는 mapping 타입을 내장하고 있기문에 for문에 사용시에 list처럼 sequence로 맵핑되어 보여지게 됩니다. 
    Mapping Types 참조

    for x in "hello":
    	print(x)
    >h
    >e
    >l
    >l
    >o

     

    반응형

    'case Computer : > Python' 카테고리의 다른 글

    Python 많이 사용하는 List 다루기  (0) 2022.01.21

    댓글

Designed by Tistory.