[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)
#-------range함수 이용3 출력-------#
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

< keyvalue값을 뒤집어주는 함수 >

# 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, 여러개 리턴값]





© 2021.02. by kirim

Powered by kkrim