3일차 - python 리스트, 튜플, 딕셔너리

    리스트란?

    - 여러 개의 데이터를 하나의 변수에 담을 수 있는 데이터 구조

    - [ ] 대괄호 사용 

     

    score = [90, 89, 77, 95, 67]

    fruit = ["apple", "banana", "orange"]

    """
    리스트 생성
    """
    
    # 1) []을 이용하여 리스트 생성 -> 값을 직접 넣어서 생성
    list1 = [3, 15, -12.5, "사과", "딸기" ]
    print(list1)
    
    # 2) list() 함수로 리스트 생성
    list2 = list(range(1, 21, 2))
    print(list2)

    리스트는 데이터 형식 상관없이 숫자, 문자 형식의 정보를 한 곳에 저장 가능.

     

    """
    리스트에서 요소 추출
    """
    
    color = ["빨강", "주황", "노랑", "초록", "파랑", "남색", "보라"]
    
    print(color[0])
    # 출력: 빨강
    
    print(color[6])
    print(color[-1])
    # 출력: 보라
    #	보라
    
    print(color[2:5])
    print(color[-5:5])
    # 출력: ['노랑', '초록', '파랑']
    #	['노랑', '초록', '파랑']
    
    print(color[4:])
    print(color[-3:])
    # 출력: ['파랑', '남색', '보라']
    #	['파랑', '남색', '보라']

     

    리스트의 마지막 데이터를 가져오고 싶을 때

    리스트 인덱스를 -1 해주면

    뒷 데이터를 가져와줌!

     

                   -1         -2        -3         -4        -5         -6         -7

    color = ["빨강", "주황", "노랑", "초록", "파랑", "남색", "보라"]

                    0          1          2          3         4          5          6

    color2 = ["빨강", "주황", "노랑", "초록", "파랑", "남색", "보라", "무지개"]
    
    print(color2[4:])
    print(color2[-3:])
    
    # 출력: ['파랑', '남색', '보라', '무지개']
    #	['남색', '보라', '무지개']

    -1, -2 ... 인덱스를 사용하는 이유는

    뒤에서 두 번째 정보를 추출하고 싶을 때

    color[5]으로 출력할 수 있지만

    list 정보가 늘어나게 되면

    color[6]로 바뀌기 때문에

     

    → color[-2] 로 사용하면 논리적 오류가 나지 않음!

     

     

     

     

     

    for문에서 리스트를 사용

    """
    for에서 리스트 사용
    """
    
    colors = ["빨강", "주황", "노랑", "초록", "파랑", "남색", "보라"]
    
    # 리스트를 사용한 for (요소 추출)
    for color in colors:
        print("나는 %s을 좋아한다." % color)
    
    print()
    
    # index를 사용한 for (요소 추출)
    for i in range(0, len(colors)):
         print("나는 %s을 좋아한다." % colors[i])
         
    """
    출력: 
    나는 빨강을 좋아한다.
    나는 주황을 좋아한다.
    나는 노랑을 좋아한다.
    나는 초록을 좋아한다.
    나는 파랑을 좋아한다.
    나는 남색을 좋아한다.
    나는 보라을 좋아한다.
    """

    첫 번째 리스트를 사용한 for문은

    값만 가져오기 때문에 colors[1], colors[3] ... 이런식으로 내가 원하는 인덱스만 가져올 수 없음.

     

    index를 사용한 for문은 내가 원하는 인덱스를 사용할 수 있음.

    ex) list 중 홀수 인덱스만 가져오기, 짝수 인덱스만 가져오기

     

     

     

     

     

     

    while문에서 리스트 사용

    """
    while문에서 리스트 사용
    """
    
    animals = ["코끼리", "호랑이", "사슴", "펭귄", "여우"]
    
    i = 0
    
    while i < len(animals):
        print(animals[i])
    
        i = i + 1

    while문에서 리스트를 가져오는 것도 가능하나

    무조건 써야 하는 상황이 아니면 비추

     

     

     

     

     

    리스트 요소 수정 및 추가

    """
    리스트 요소 수정 및 추가
    """
    
    flowers = ["목련", "벚꽃", "장미", "백일홍"]
    print(flowers)
    
    # 벚꽃 -> 무궁화로 변경
    # 리스트명[인덱스] = 데이터
    flowers[1] = "무궁화"
    print(flowers)
    
    # 리스트에 안개꽃을 추가
    # flowers[4] = "안개꽃"
    # error
    
    flowers.append("안개꽃")
    print(flowers)

    list의 요소를 추가할 때

    list[index] = "요소"로 넣으면 에러가 뜬다.

    list의 공간은 4번째 방밖에 없는데 5번째 방에 데이터를 넣으려고 해서!

     

    요소를 추가하기 위해서는

    리스트명.append("요소") 

     

     

     

     

     

    리스트 중간에 요소 삽입 및 위치 찾기

    """
    리스트 요소 삽입 및 위치 찾기
    """
    
    flowers = ["목련", "벚꽃", "장미", "백일홍"]
    print(flowers)
    
    # 벚꽃 위치에 무궁화 삽입 대신에 기존 데이터 유지
    # 리스트명.insert(인덱스, 데이터)
    flowers.insert(1, "무궁화")
    print(flowers)
    # 출력: ['목련', '무궁화', '벚꽃', '장미', '백일홍']
    
    
    # index 위치를 찾기
    # 리스트명.index(데이터)
    print(flowers.index("벚꽃"))
    # 출력: 2
    
    # 벚꽃 위치에 안개꽃 삽입 대신에 기존 데이터 유지
    flowers.insert(flowers.index("벚꽃"), "안개꽃")
    print(flowers)
    # 출력: ['목련', '무궁화', '안개꽃', '벚꽃', '장미', '백일홍']

    기존 데이터를 유지하면서 "벚꽃" 위치에 무궁화를 삽입하고 싶다면

    list.insert(인덱스, "요소")

     

    "벚꽃" 요소에 index 위치를 찾기 위해서는

    list.index("요소")

     

    list를 쓸 때 요소는 알지만 인덱스 번호를 모를 때는

    → list.index로 요소 번호를 찾고 그 자리에 insert를 해준다!

     

     

     

     

     

    리스트 요소 삭제

    """
    리스트 요소 삭제
    """
    
    flowers = ['목련', '무궁화', '안개꽃', '벚꽃', '장미', '백일홍']
    
    # 특정 요소를 삭제 -> 리스트.remove(데이터)
    # 안개꽃 삭제
    flowers.remove("안개꽃")
    print(flowers)
    # 출력: ['목련', '무궁화', '벚꽃', '장미', '백일홍']
    
    
    # 특정 요소를 삭제 -> 삭제할 정보를 사용할 경우
    # 리스트.pop(인덱스)
    # flowers 리스트에서 벚꽃을 삭제하고 flower 변수에 담기
    
    flower = flowers.pop(flowers.index("벚꽃"))
    print(flowers)
    # 출력: ['목련', '무궁화', '벚꽃', '장미', '백일홍']
    
    # 리스트에 모든 요소를 삭제
    flowers.clear()
    print(flowers)

    리스트에 특정 요소를 삭제하고 싶을 때 

    list.remove("요소")

     

    리스트에 특정 요소를 삭제하고 삭제할 정보를 사용할 경우

    list.pop(인덱스)

     

    리스트에 모든 요소 삭제

    list.clear()

     

     

    리스트 병합

    """
    리스트 병합
    """
    
    person1 = ["kim", 24, "kim@naver.com"]
    person2 = ["lee", 35, "lee@hanmail.net"]
    
    person = person1 + person2
    
    print(person)
    
    # 출력: ['kim', 24, 'kim@naver.com', 'lee', 35, 'lee@hanmail.net']

    리스트 2개를 1개 리스트로 합치고 싶을 때는 + 연산자만 쓰면 된다!

     

     

     

     

     

     

    리스트 합계, 평균 구하기

    """
    리스트 합계, 평균 구하기
    """
    
    scores = [80, 90, 85, 95, 100]
    
    sm = sum(scores)
    
    print("합계: ", sm)
    print("평균: ", sm/len(scores))
    
    # 출력: 합계:  450
    #	평균:  90.0

    파이썬은 for문을 쓰지 않아도 내장 함수 sum으로 합계를 구할 수 있음.

     

    리스트 내장 함수

     

     

     

     

    + 리스트에서 제공하는 함수

    리스트 메소드

    """
    리스트에서 제공하는 함수 예제
    """
    
    # 1) 리스트 요소를 반대로 출력
    # 리스트명.reverse()
    data = [10, 20, 30, 40, 50]
    print(data)
    
    data.reverse()
    print(data)
    
    # 2) 리스트 복사하기
    # 리스트명.copy()
    flowers = ["목련", "벚꽃", "장미" ]
    flowers1 = flowers.copy()
    print(flowers1)
    
    # 3) 리스트 정렬하기
    # 리스트명.sort() -> 기본값: 오름차순 정렬
    data = [12, 8, 15, 32, -3, -20, 15, 34, 6]
    print(data)
    data.sort()
    print(data)
    
    # 내림차순(큰 것부터 나옴, 최신 날짜순)
    # 리스트명.sort(reverse=True)
    data.sort(reverse=True)
    print(data)

     

     

     

     

     

    문자열 메소드

    """
    문자열에서 제공하는 메소드 예제
    """
    
    # 1) find()
    # 문자열.find(찾을 문자) -> 찾은 문자의 위치
    string1 = "Python is fun!"
    print(string1)
    print(string1.find("fun"))
    print(string1.find("funny")) # 찾는 문자가 없으면 -1
    
    # 출력: Python is fun!
    #	10
    #	-1
    
    
    
    # 2) 문자열 치환하기 replace(기본데이터, 치환할 데이터)
    # 하이픈을 제거한 핸드폰 번호를 출력
    phone = "010-1234-5678"
    print(phone)
    
    phone1 = phone.replace("-", "")
    print(phone1)
    
    # 출력: 010-1234-5678
    #	01012345678
    
    
    
    # 3) 문자열 분리하기 split(특정문자) -> 리스트로 반환
    hello = "have a nice day"
    print(hello)
    
    list1 = hello.split( )
    print(list1)
    print(type(list1))
    
    for l in list1:
        print(l)
    
    """
    출력: have a nice day
    ['have', 'a', 'nice', 'day']
    <class 'list'>
    have
    a
    nice
    day
    """
    
    # 4) 리스트를 문자열로 변환 문자열_분리기준.join(리스트)
    text = ""
    for l in list1:
        text = text + " " + l
    
    print(text)
    # 출력:  have a nice day
    
    #join 함수 활용
    text = " ".join(list1)
    print(text)
    # 출력: have a nice day
    
    # 하이픈이 포함된 휴대폰 번호
    phone = "010-1234-5678"
    print(phone)
    # 출력: 010-1234-5678
    
    # 하이픈 기준으로 분리된 휴대폰 번호
    phone1 = phone.split("-")
    print(phone1)
    # 출력: ['010', '1234', '5678']
    
    # 하이픈 기준으로 연결한 휴대폰 번호
    phone2 = "-".join(phone1)
    print(phone2)
    # 출력: 010-1234-5678

    문자열 메소드

     

     

     

    2차원 리스트의 구조

    """
    2차원 리스트 구조
    """
    
    numbers = [[10, 20, 30], [40, 50, 60, 70]]
    
    print(numbers[0][0])
    print(numbers[1][0])
    print()
    print(len(numbers[0])) # 1차원
    print(len(numbers[1])) # 2차원
    print()
    print(sum(numbers[0])) # 1차원
    print(sum(numbers[1])) # 2차원

     

     

     

     

    이중 for문으로 2차원 리스트 요소 추출

    numbers = [[10, 20, 30], [40, 50, 60, 70]]
    
    # 2차원 리스트 for문 사용
    for i in range(len(numbers)):
        for j in range(len(numbers[i])):
            print("numbers[%d][%d] = %d" % (i, j, numbers[i][j]))

     


    다섯 명의 학생에 대한 세 과목 성적의 합계와 평균을 구하는 프로그램

    """
    다섯 명의 학생에 대한 세 과목 성적의 합계와 평균을 구하는 프로그램
    """
    
    scores = [[75, 83, 90], [86, 86, 73], [76, 95, 83], [89, 96, 69], [89, 76, 93]]
    
    for i in range(len(scores)):
        sm = 0
        for j in range(len(scores[i])):
            sm = sm + scores[i][j]
    
        # 평균
        avg = sm / len(scores[i])
        print("%d번째 학생의 합계: %d, 평균: %.2f" % (i+1, sm, avg))
        
    """
    출력:
    1번째 학생의 합계: 248, 평균: 82.67
    2번째 학생의 합계: 245, 평균: 81.67
    3번째 학생의 합계: 254, 평균: 84.67
    4번째 학생의 합계: 254, 평균: 84.67
    5번째 학생의 합계: 258, 평균: 86.00
    """

     

     

     

    이중 for문을 사용하지 않고 합계와 평균을 구하기

    # 2중 for문을 사용하지 않고 합계와 평균을 구하기
    
    for i in range(len(scores)):
        sm = 0
        sm = sum(scores[i])
        avg = sm / len(scores[i])
    
        print("%d번째 학생의 합계: %d, 평균: %.2f" % (i+1, sm, avg))
        
    """
    출력
    1번째 학생의 합계: 248, 평균: 82.67
    2번째 학생의 합계: 245, 평균: 81.67
    3번째 학생의 합계: 254, 평균: 84.67
    4번째 학생의 합계: 254, 평균: 84.67
    5번째 학생의 합계: 258, 평균: 86.00
    """

     


    튜플이란?

    - 튜플에서는 리스트의 대괄호([ ]) 대신에 소괄호 (( ))를 사용.

    - 튜플에서는 리스트와는 달리 요소의 수정과 추가가 불가능함.

     

    """
    튜플 생성
    """
    
    animals = ("토끼", "거북이", "사자", "여우")
    print(animals)
    print(animals[0])
    
    # 출력: ('토끼', '거북이', '사자', '여우')
    #	토끼
    
    # animals[0] = "호랑이"
    # error

    튜플은 데이터를 지정하면 수정할 수 없음!

     

     

     

     

    튜플의 병합

    tup1 = tuple(range(10, 51, 10))
    tup2 = tuple(range(100, 151, 10))
    
    # 튜플 병합
    tup = tup1 + tup2
    print(tup)

     

     


    딕셔너리란?

    - 리스트와는 다른 방법으로 추출

    - key, value 형태로 되어있음.

    딕셔너리 구조

    """
    딕셔너리 생성 및 요소 추출
    """
    
    # 딕셔너리 생성
    member = {"name":"황예린", "age":22, "email":"yerin@hanmail.net"}
    print(member)
    # 출력: {'name': '황예린', 'age': 22, 'email': 'yerin@hanmail.net'}
    
    score = dict([("국어", 80), ("영어", 90), ("수학", 100)])
    print(score)
    # 출력: {'국어': 80, '영어': 90, '수학': 100}
    
    
    # 딕셔너리 요소 추출
    # 딕셔너리명[key] -> value 요소가 추출됨
    print(member["name"])
    print(member["email"])
    print(score["국어"])
    print(score["수학"])
    
    """
    출력
    황예린
    yerin@hanmail.net
    80
    100
    """

     

     

     

     

     

    딕셔너리 요소 추가

    score = dict([("국어", 80), ("영어", 90), ("수학", 100)])
    print(score)
    
    # 딕셔너리 요소 추가
    # score 딕셔너리에 음악 점수 100점 추가
    score["음악"] = 100
    score["국어"] = 100
    print(score)

    딕셔너리명[key[ = 값 → 키가 없으면 새로 등록, 있으면 값이 수정됨.

     

     

     

     

     

    딕셔너리 요소 삭제

    score = dict([("국어", 80), ("영어", 90), ("수학", 100)])
    
    # 딕셔너리 요소 삭제
    # 음악 점수 삭제
    # 딕셔너리명.pop(키)
    x = score.pop("음악")
    print(score)
    print(x)
    
    # 출력: {'국어': 100, '영어': 90, '수학': 100}
    #	100
    
    
    # 딕셔너리 전체 삭제
    # 딕셔너리명.clear()
    score.clear()
    print(score)

     

     

     

     

    for문에 딕셔너리 사용

    # 딕셔너리 생성
    member = {"name":"황예린", "age":22, "email":"yerin@hanmail.net"}
    print(member)
    
    # 딕셔너리를 for문에 사용하면 key값을 return
    for key in member:
        print(key, ":", member[key])

    딕셔너리를 for문에 넣으면 key 값을 반환해줌!

     

     

     

     

    for문을 사용하지 않고 딕셔너리의 총합과 평균 구하기

    # for문을 사용하지 않고 딕셔너리의 총합과 평균 구하기
    
    scores = {"김채린": 85, "박수정": 98, "함소희": 94, "안예린": 90, "연수진": 93}
    
    
    print(scores.values())
    
    sm = sum(scores.values())
    avg = sm / len(scores)
    print("합계: %d, 평균: %.2f" % (sm, avg))

    list.values() → 딕셔너리 value의 총 합계를 구할 수 있음.

     


    딕셔너리를 이용하여 영어 단어 퀴즈를 만드는 프로그램

    """
    딕셔너리를 이용하여 영어 단어 퀴즈를 만드는 프로그램
    """
    words = {"꽃": "flower", "나비": "butterfly", "학교": "school", "자동차": "car", "비행기": "airplane"}
    
    print("<영어 단어 맞추기 퀴즈>")
    
    for kor in words:
        input_word = input("'%s'에 해당되는 영어 단어를 입력해주세요: " % kor)
    
        if words[kor] == input_word:
            print("정답입니다!")
        else:
            print("틀렸습니다!")

     

     

     

     

     

    주중 최저 기온을 가지는 요일과 최저 기온을 출력

    """
    딕셔너리 temp에서 주중 최저 기온을 가지는 요일과
    최저 기온을 실행결과와 같이 출력하는 프로그램
    """
    
    temp = {"월": 15.5, "화": 17.0, "수": 16.2, "목": 12.9, "금": 11.0, \
            "토": 10.5, "일": 13.3}
    
    c = temp["월"]
    day = "월"
    
    for key in temp:
        if temp[key] < c:
            c = temp[key]
            day = key
    
    print("요일: %s, 최저 기온: %.1f" % (day, c))
    
    
    # list comprehension (리스트 컴프리헨션)
    # [(변수를 이용한 값) for (사용할 변수 이름) in (순회할 수 있는 값) if (조건)]
    c = min(temp.values())
    day = [k for k, v in temp.items() if v == c][0]
    
    print("요일: %s, 최저 기온: %.1f" % (day, c))
    
    """
    for문을 돌면서 temp.item()에 key값과 value 값을 나오게 함.
    """

     

     

     

    list comprehension (리스트 컴프리헨션)

    - '리스트 컴프리헨션'은 리스트를 간단하게 한 줄로 만들 수 있는 파이썬의 문법

     

    [ (변수를 이용한 값) for (사용할 변수 이름) in (순회할 수 있는 값) if (조건) ]

     

     

    댓글