[코드잇] 프로그래밍과 데이터 in Python : 리스트, 사전 정리
새벽 2시까지 공부한 결과... 2... 24개?!
사실은 책과 스파르타를 통해 공부했던 html 과 css부분이 나와서 영상을 매우 빠르게 훑었다.
거의 아는 내용이였지만 실습으로 기억력을 확인할 수 있어서 의미있는 시간이였다.
자, 오늘은 코드잇 토픽 중 '프로그래밍과 데이터 in Python'에 나오는 리스트와 사전에 대해 정리해볼 것이다.
리스트
numbers = [1, 2, 3, 4, 5, 6, 7]
names = ["재석", "석진", "종국", "하하", "지효", "개리", "광수"]
이런 형식이 리스트다. [] 안에 여러 개의 값을 넣은 것.
여기서 print(numbers)를 하면 [1, 2, 3, 4, 5, 6, 7]이 나온다.
이 리스트 중에 하나씩 뽑아서 출력하는 방법이 있다.
#리스트 인덱싱
print(numbers[0], names[3], numbers[-1])
#실행결과 : 1 하하 7
이렇게 리스트이름[숫자]를 써서 숫자에 해당하는 값을 출력하는 것인데,
리스트는 첫번째부터 0으로 센다. -1부터는 역순으로 센다고 보면 된다.
리스트의 범위를 넘어선 숫자를 쓰면 오류가 난다
또한 numbers[0, 1] 이런식으로 한 번에 여러개를 인덱싱하려고 하면 오류가 난다.
#리스트 값 삭제하기
del(names[5])
del(names[-1])
print(names)
#실행결과 : ['재석', '석진', '종국', '하하', '지효']
리스트의 값을 삭제하고 싶으면 del(리스트이름[숫자])를 쓰면 된다.
#리스트에 값 추가하기
names.append("세찬")
names.append("소민")
print(names)
#실행결과 : ['재석', '석진', '종국', '하하', '지효', '세찬', '소민']
리스트에 값을 추가하고 싶다면 append()를 쓰면 된다.
#리스트 범위 선택 : 슬라이싱
print(numbers[0:3])
print(names[:3])
print(names[3:])
#실행결과:
#[1, 2, 3]
#['재석', '석진', '종국']
#['하하', '지효', '세찬', '소민']
리스트에서 여러개를 선택하는 방법이 있다. 물론 그 여러개가 서로 붙어있어야 한다.
슬라이싱은, [숫자1:숫자2] 이런 형식으로 쓴다.
그런데 이상하게 느껴지는 게 있을 것이다.
numbers[0:3]이라고 했는데 왜, 인덱스 3번에 해당하는 4까지 출력되지 않는 걸까?
슬라이싱 할 때는 "인덱스 0번부터 3번까지 뽑아줘~" 가 아니라,
"인덱스 0번부터 3개 뽑아줘~"로 인식되는 것 같다.
숫자1을 쓰지않으면 자동으로 0부터 3개, 숫자 2를 안쓰면 인덱스 숫자1부터 끝까지 출력된다.
대략 앞에는 인덱스, 뒤에는 갯수라고 보면 수월할 것 같다.
#리스트에 값 삽입하기
numbers.insert(3, 1)
print(numbers)
#실행결과 :
#[1, 2, 3, 1, 4, 5, 6, 7]
append()는 항상 리스트 끝에 값을 추가한다.
리스트 끝이 아니라 원하는 위치에 값을 추가하고 싶다면 insert()를 쓰면 된다.
앞의 3은 들어갈 자리, 뒤에 1은 추가할 값이다.
#리스트 정렬하기
#순서대로 정렬하기
print(sorted(numbers))
names.sort()
print(names)
#역순으로 정렬하기
sorted(numbers, reverse=True)
names.sort(reverse=True)
print(numbers)
print(names)
#실행결과:
#[1, 1, 2, 3, 4, 5, 6, 7]
#['석진', '세찬', '소민', '재석', '종국', '지효', '하하']
#[1, 2, 3, 1, 4, 5, 6, 7]
#['하하', '지효', '종국', '재석', '소민', '세찬', '석진']
또한 리스트를 이름순으로 정리해줄 수도 있다. sorted()와 sort()를 쓰면 된다.
reverse=True를 쓰면 역순으로 정렬해줄 수 있다.
#리스트 뒤집기
names.reverse()
print(names)
#실행결과:
#['소민', '세찬', '지효', '하하', '종국', '석진', '재석']
이름순으로 정리하지 않고 기존의 리스트를 거꾸로 뒤집을 때는 .reverse()를 쓰면 된다.
사전
my_dict = {
"이름" : "깅깅",
"나이" : "20대 후반",
"관심사" : "코딩"
}
사전은 이런 식으로 쓴다. 여기서 이름, 나이, 관심사는 'key'가 되고 깅깅, 20대 후반, 코딩은 'value'가 된다.
print(my_dict.keys())
print(my_dict.values())
print(my_dict.items())
print(my_dict["이름"])
#실행결과 :
#dict_keys(['이름', '나이', '관심사'])
#dict_values(['깅깅', '20대 후반', '코딩'])
#dict_items([('이름', '깅깅'), ('나이', '20대 후반'), ('관심사', '코딩')])
#깅깅
이렇게 .key()와 .values()를 쓰면 키와 값들을 모두 출력할 수 있고,
.items()를 쓰면 키와 값끼리 튜플로 만들어서 출력해준다.
[]안에 key의 값을 넣으면 그 키에 해당하는 값을 불러올 수 있다.
#사전에 키와 값 추가, 삭제하기
my_dict["MBTI"] = "INTP"
print(my_dict)
#실행결과:
#{'이름': '깅깅', '나이': '20대 후반', '관심사': '코딩', 'MBTI': 'INTP'}
이런식으로 작성하면 사전에 키와 값을 추가할 수 있다.
삭제를 하려면 리스트처럼 del을 써주면 된다.
del(my_dict["MBTI"])
print(my_dict)
#실행결과 :
#{'이름': '깅깅', '나이': '20대 후반', '관심사': '코딩'}
#키와 값 뒤집기
코드잇 실습에 키와 값을 뒤집는 문제가 나왔다.
영한 단어장에서 한영 단어장으로 바꾸는 건데, 코드는 다음과 같다.
# 언어 사전의 단어와 뜻을 서로 바꿔주는 함수
def reverse_dict(dict):
new_dict = {} # 새로운 사전
# dict의 key와 value를 뒤집어서 new_dict에 저장
for key, value in dict.items():
new_dict[value] = key
return new_dict # 변환한 새로운 사전 리턴
# 영-한 단어장
vocab = {
'sanitizer': '살균제',
'ambition': '야망',
'conscience': '양심',
'civilization': '문명',
'privilege': '특권',
'principles': '원칙'
}
# 기존 단어장 출력
print("영-한 단어장\n{}\n".format(vocab))
# 변환된 단어장 출력
reversed_vocab = reverse_dict(vocab)
print("한-영 단어장\n{}".format(reversed_vocab))
여기서 for문이 나오는데 이에 대해서는 나중에 정리할 예정!
원하는 값이 있는지 없는지 찾기
print("깅깅" in my_dict.values())
#실행결과:
#True
원하는 값이 사전, 혹은 리스트에 있는지 없는지 찾고 싶다면 in을 쓰면 된다.
참고로 사전같은 경우, 키는 "이름" in my_dict 이렇게만 써도 찾아내는데 값은 못 찾는다.
그렇기 때문에 값이 있는지 알고 싶다면 꼭 .values()를 써야한다.
+리스트와 사전에 몇개의 값, 아이템(키와 값)이 있는지 알고 싶다면
len(my_dict) 이런 식으로 쓰면 된다.
len은 길이라는 뜻의 length의 약자이다.
참고로 문자열의 길이도 확인할 수 있다!
본격적으로 데이터를 다루는 토픽에 오면서 나는 며칠 전, 책으로 공부한 것과
짧은 강좌를 통해 배운 웹개발 지식으로 웹을 만들었을 때가 떠올랐다.
'이걸 알았다면 로그인하는 부분은 정말 쉽게 해결할 수 있었을 텐데...' 싶었다.
웹 만들면서 파이썬과 데이터에 관심이 커져서 코드잇을 수강한거라,
이 부분부터 어떻게 써먹을 수 있을지 이것저것 떠올리기 시작해서
이 전보다 더 재밌게 수강했다.
더 힘내서 한 발짝 꿈에 다가가보자, 깅깅!
#코드잇 #코딩공부 #오늘도코드잇 #코드잇TIL #파이썬 #파이썬데이터