[Python]파이썬 기초문법4 - [for, dictionary(사전), 앨리어싱, 리스트와 문자열]
이번 포스트는 [for, dictionary(사전), 앨리어싱, 리스트와 문자열]에 관한 내용입니다.
1️⃣ for문
(1) 기본 for문
# 방법1
temp = [1, 2, 3, 4]
for number in temp:
print(number)
# 방법2
for number in [1, 2, 3, 4]
print(number)
1
2
3
4
(2) range함수 이용
- 리스트를 직접 만들지 않아도 간편하고 깔끔하게 만들어줍니다.
- 메모리 효율성면에서 좋습니다.
# 비효율적인 방법
for number in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
print(number)
# range함수 이용1
for number in range(1, 11): # 1 ~ 10
print(number)
# range함수 이용2
for number in range(11): # 0 ~ 10
print(number)
# range함수 이용3
for number in range(3, 16, 3): # 3 ~ 15범위를 3간격
print(number)
3
6
9
12
15
2️⃣ 사전(dictionary)
- 리스트(list)와 비슷한 기능을 하기도 합니다.
- 하지만 값을 불러오는 키값(index)을 랜덤하게 배정할 수 있습니다.
- 심지어 키값(index)을 정수가 아닌 다른 자료형으로도 가능합니다.
(1) 기본형(정수키)
my_dictionary = {
4: 16,
2: 4,
3: 9
}
print(class(my_dictionary))
<class 'dict'>
(2) 문자키형
my_dictionary = {
"일": "하나",
"이": "둘",
"삼": "셋"
}
print(my_dictionary["일"])
print(my_dictionary["이"])
print(my_dictionary["삼"])
하나
둘
셋
(3) 새로운 쌍 추가
my_dictionary = {
4: 16,
2: 4,
3: 9
}
my_dictionary[8] = 64
print(my_dictionary)
{4: 16, 2: 4, 3: 9, 8: 64}
(4) 값 출력1
my_dictionary = {
"일": "하나",
"이": "둘",
"삼": "셋"
}
# 방법 1
print(my_dictionary)
print(my_dictionary.values())
print('둘' in my_dictionary.values())
# 방법 2
for value in my_dictionary.values():
print(value)
{'일': '하나', '이': '둘', '삼': '셋'}
# 방법 1
dict_values(['하나', '둘', '셋'])
True
# 방법 2
하나
둘
셋
(5) 값 출력2
my_dictionary = {
"일": "하나",
"이": "둘",
"삼": "셋"
}
# 방법 1
print(my_dictionary.keys())
# 방법 2
for key in my_dictionary.keys():
print(key)
# 방법 1
dict_keys(['일', '이', '삼'])
# 방법 2
일
이
삼
(6) 키와 값 동시 출력(items기능)
my_dictionary = {
"일": "하나",
"이": "둘",
"삼": "셋"
}
# 방법 1
for key in my_dictionary.keys():
value = my_dictionary[key]
print(key, value)
# 방법 2
for key, value in my_dictionary.items():
print(key, value)
# 방법 1
일 하나
이 둘
삼 셋
# 방법 2
일 하나
이 둘
삼 셋
(7) 사전기능 응용1
< key와 value값을 뒤집어주는 함수 >
# key와 value를 바꿔주는 함수
def reverse_dict(dict):
new_dict = {} # 새로운 사전
for key, value in dict.items():
new_dict[value] = key
return new_dict
my_dictionary = {
"일": "하나",
"이": "둘",
"삼": "셋"
}
my_dictionary = reverse_dict(my_dictionary)
for key, value in my_dictionary.items():
print(key, value)
하나 일
둘 이
셋 삼
(8) 사전기능 응용2
< 투표집계 함수 >
# 투표 결과 리스트
votes = ['철수', '영희', '민수', '철수', '영희', '민수', '철수', \
'민수', '철수', '민수', '철수', '철수', '민수', '민수', '영희', \
'영희', '철수', '철수', '민수', '철수', '철수', '영희', '철수']
vote_counter = {}
for name in votes:
if name in vote_counter:
vote_counter[name] += 1
else:
vote_counter[name] = 1
print(vote_counter)
{'철수': 11, '영희': 5, '민수': 7}
3️⃣ 앨리어싱(aliasing)
(1) 변수 값 변경
x = 3
y = x
y = 4
print(x)
print(y)
3
4
- y값에 x변수를 지정해주고 y값을 변경해주었는데 y값만 변경되었습니다.
- 하지만 리스트형식의 변수는 다른 결과가 일어납니다.
(2) 변수 요소값 변경
x = [1, 2, 3, 4, 5]
y = x
y[2] = 9
print(x)
print(y)
[1, 2, 9, 4, 5]
[1, 2, 9, 4, 5]
- 이처럼 리스트형식의 변수를 복사했을 때는 y리스트의 요소값을 변경하면 x리스트의 요소값까지 변경된 것을 알 수 있습니다.
(3) 변수 자체를 변경
x = [1, 2, 3, 4, 5]
z = [3, 3, 3, 3, 3]
y = x
y = z # 새로운 리스트를 지정
print(x)
print(y)
[1, 2, 3, 4, 5]
[3, 3, 3, 3, 3]
- 변수 자체를 새로운z리스트로 복사해주면 x리스트의 변경없이 y리스트 만이 변경됨을 알 수 있습니다.
- 이러한 점들로 봤을때 파이썬의 리스트를
y = x
와 같은 형태로 넘겨주었을 때 값을 복사하는 것이 아닌 x리스트를 참조형식으로 넘겨줌을 알 수 있습니다.(C언어의 배열에서 포인터와 비슷합니다.)
(4) 리스트 복사(list함수)
- 파이썬에는 리스트를 참조형으로 넘겨주는 것이 아닌 새로운 리스트로 복사하여 주는 함수가 있습니다.
list
함수를 이용하면 아래 예시와 같이 y리스트만 변경됨을 알 수 있습니다.
x = [1, 2, 3, 4, 5]
y = list(x)
y[2] = 9
print(x)
print(y)
[1, 2, 3, 4, 5]
[1, 2, 9, 4, 5]
4️⃣ 리스트와 문자열
(1) 인덱싱
- 두 자료형은 인덱싱하여 출력이 가능합니다.
temp_list = ['A', 'B', 'C', 'D'] # 리스트
print(temp_list[0])
print(temp_list[-1])
temp_string = "ABCD" # 문자열
print(temp_string[0])
print(temp_string[-1])
A
D
A
D
(2) 슬라이싱 (slicing)
- 두 자료형은 슬라이싱이 가능합니다.
temp_list = ['A', 'B', 'C', 'D'] # 리스트
print(temp_list[0:4])
print(temp_list[1:])
print(temp_list[:2])
temp_string = "ABCD" # 문자열
print(temp_string[0:4])
print(temp_string[1:])
print(temp_string[:2])
['A', 'B', 'C', 'D']
['B', 'C', 'D']
['A', 'B']
ABCD
BCD
AB
(3) (리스트, 문자열) 연결
temp_list = ['A', 'B', 'C', 'D'] # 리스트
temp_list2 = ['E', 'F', 'G', 'H'] # 리스트2
a_list = temp_list + temp_list2
print(a_list)
temp_string = "ABCD" # 문자열
temp_string2 = "EFGH" # 문자열2
a_string = temp_string + temp_string2
print(a_string)
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
ABCDEFGH
- 리스트와 문자열 모두 두개를 연결할 수 있었습니다.
5️⃣ 리스트와 문자열 차이점
(1) 리스트 요소값 변경
- 리스트는 요소 값들을 변경할 수 있었습니다.
- 추가적으로 두 리스트를 연결하여 변수에 지정했을 경우 참조형이 아닌 새로운 리스트를 만들어서 복사해 줌을 알 수 있습니다.
- 당연히 새롭게 생성된 리스트 또한 요소 값을 변경할 수 있습니다.
temp_list = ['A', 'B', 'C', 'D'] # 리스트
temp_list2 = ['E', 'F', 'G', 'H'] # 리스트2
a_list = temp_list + temp_list2
print(a_list)
print(temp_list)
print(temp_list2)
a_list[3] = '핫'
temp_list2[2] = '콜'
print(a_list)
print(temp_list)
print(temp_list2)
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
['A', 'B', 'C', 'D']
['E', 'F', 'G', 'H']
['A', 'B', 'C', '핫', 'E', 'F', 'G', 'H']
['A', 'B', 'C', 'D']
['E', 'F', '콜', 'H']
(2) 문자열 요소값 변경
- 문자열의 요소 값은 변경할 수 없습니다.
- 문자열의 경우
"ABCD"
의 문자열을 참조형으로 불러옴을 알 수 있습니다. - 추가적으로 두 문자열을 연결하여 변수에 지정했을 경우 또한 참조형으로 불러 옵니다.
temp_string = "ABCD" # 문자열
temp_string2 = "EFGH" # 문자열2
a_string = temp_string + temp_string2
temp_string[3] = '핫' # 컴파일 오류
temp_string2[3] = '핫' # 컴파일 오류
a_string[3] = '핫' # 컴파일 오류
TypeError: 'str' object does not support item assignment
(3) 문자열과 리스트 변경
- 문자열을 리스트형식으로 혹은 그 반대로 바꿔주기 위해서는 약간의 편법이 필요합니다.
- 문자열을 리스트형식으로 복사하는 것은 위에서 배웠듯이
list
함수를 이용하면 됩니다.
< 문자열 -> 리스트 >
temp_string = "ABCD" # 문자열
new_list = list(temp_string) # 새로운 문자열
print(temp_string)
print(new_list)
ABCD
['A', 'B', 'C', 'D']
< 리스트 -> 문자열 >
temp_list = ['A', 'B', 'C', 'D'] # 리스트
new_string = "" # 새로운 문자열
for i in range(len(temp_list)):
new_string += temp_list[i]
print(temp_list)
print(new_string)
['A', 'B', 'C', 'D']
ABCD
< 파이썬[Python] 기초문법 포스트 목차 >
1. 파이썬 기초문법1 [자료형, 기본출력, 함수, 불린형, type함수]
2. 파이썬 기초문법2 [옵셔널 파라미터, 변수(글로벌, 로컬), PEP8, while, if]
3. 파이썬 기초문법3 [리스트(list)]
>> 파이썬 기초문법4 [for, dictionary(사전), 앨리어싱, 리스트와 문자열]
5. 파이썬 기초문법5 [모듈, 표준 라이브러리 모듈, datetime모듈]
6. 파이썬 기초문법6 [input, 파일 입출력함수, strip, split, 여러개 리턴값]