Container

jjiani·2021년 1월 30일
0

Python

목록 보기
4/6
post-thumbnail

외쳐! 할 수 있다!👌

Container란?

: 여러개의 값을 저장할 수 있는 것(객체)

Sequence형 컨테이너

: 시퀀스는 데이터가 순서대로 나열된 형식을 나타낸다.
🚨 주의)순서대로 나열과 정렬(sort)은 같은 뜻이 아님!

  • 특징
  1. 순서를 가질 수 있다.(0부터 시작!)
  2. 특정 위치의 데이터를 가리킬 수 있다.

1. List

  • 리스트는 대괄호[]list()를 통해 만들 수 있다.
my_list = []
other_list = list()
  • 값에 대한 접근은 list[i]로 한다. -> [value1, value2, value3]

2. Tuple

  • 튜플은 리스트와 유사하지만, ()로 묶어서 표현합니다. -> (value1, value2)
  • 그리고 tuple은 수정 불가능(불변, immutable)하고, 읽을 수 밖에 없다. - 주로 직접사용 X
# (1) 리스트는 특정 원소를 변경할 수 있다.
a_list = [5, 10]
a_list[0] = '0번째'
print(my_list)
#['0번째', 10]

# (2) 튜플은 변경 불가능하다.
b_tuple = (5, 10)
b_tuple[0] = '0번째'
print(my_tuple)
#TypeError: 'tuple' object does not support item assignment
tuple1 = ('hello')
type(tuple1) #<class 'str'>

#하나의 항목으로 구성된 튜플은 값 뒤에 쉼표를 붙이면 가능
single_tuple = ('hello',)
print(type(single_tuple)) #<class 'tuple'>

3. Range

: 숫자의 시퀀스를 나타내기 위해 사용된다.

  • 기본형 : range(n) : 0부터 n-1까지 값을 가짐
  • 범위 지정 : range(n, m) : n부터 m-1까지 값을 가짐
  • 범위 및 스텝 지정 : range(n, m, s) : n부터 m-1까지 +s만큼 증가한다.(음수지정가능)
#음수로 표현하고 싶다면?
list(range(0, -10, -1)) #0부터 -10까지 -1만큼 간격으로
#리스트에 range를 담고 싶다면?
[range(3)] #[range(0, 3)] -> 리스트가 가진 원소의 하나로 range(3)을 담겠다는 뜻

a = list(range(3))
print(a, type(a)) #[0, 1, 2] <class 'list'> -> 리스트에 range에 담긴 값을 담고싶다면 리스트로 형변환을 해줘야함!

시퀀스에서 활용하는 연산자/함수

operation설명
x in scontainment test
x not in scontainment test
s1 + s2concatenation
s * nn번만큼 반복하여 더하기
s[i]indexing
s[i:j]slicing
s[i:j:k]k간격으로 slicing
len(s)길이
min(s)최솟값
max(s)최댓값
s.count(x)x의 개수
# 0(첫번째 값), 전체길이만큼
# 5씩 증가시켜서 slicing
a_list[0:len(a_list):5]

# 처음부터 끝까지 5씩 증가시켜서 slicing
sample_list[::5]

Non-sequence 컨테이너

1. Set

  • set은 수학에서의 집합과 동일하게 처리된다. -> {value1, value2, value3}
  • set은 중괄호{}를 통해 만들며, 순서가 없고 중복된 값이 없다. -> 📢알고리즘 문제풀때 중복을 걸러낼때 사용하면 좋지만 순서보장은 안됨!
# set으로 중복된 값을 제거
list_a = [2, 1, 2, 3, 1, 1, 2]
list(set(list_a))
# [1, 2, 3] -> 순서보장 X
  • 빈 집합을 만들려면 set()을 사용해야 합니다. ({}로 사용 불가능.)

2. Dictionary

: dictionarykeyvalue가 쌍으로 이뤄져있다.

  • {}를 통해 만들며, dict()로 만들 수도 있다. -> {Key1:Value1, Key2:Value2, Key3:Value3, ...}
dict_a = {}
dict_b = dict()
  • key변경 불가능(immutable)한 데이터만 가능. (immutable : string, integer, float, boolean, tuple, range)
  • valuelist, dictionary를 포함한 모든 것이 가능하다.
  • 중복된 key는 존재 불가능하다!
  • 🚨 주의) 인덱스(0,1,2...)가 아니라 key값으로 접근한다! -> Value값으로 key를 찾을수는 없음!
phone = {'서울': '02', '충북': '043', '대전':'042'}
phone['충북']
#043

📢 dictionary에서 key에 대응되는 value값을 가져오기 위해서는 두가지 방법이 있다.
1. a.get() -> 존재하지 않는 키로 값을 가져오려고 할 때 None을 반환.
2. a['key'] -> 존재하지 않는 키로 값을 가져오려고 할 때 오류가 발생.

  • 딕셔너리의 .keys() 메소드를 활용하여 key를 확인 해볼 수 있다.
  • 딕셔너리의 .values() 메소드를 활용하여 value를 확인 해볼 수 있다.
  • 딕셔너리의 .items() 메소드를 활용하여 key, value를 확인 해볼 수 있다. -> 📢 (key,value)가 튜플로 묶인 원소를 가진 유사리스트의 형태! -> 인덱스 접근 가능!
phone.items() 
#dict_items([('서울', '02'), ('충북', '043'), ('대전', '042')])

🚨 주의) mutable 데이터의 복사?

#(1)
num1 = [1, 2, 3, 4]
num2 = num1
num2[0] = 100

print(num1) #[100, 2, 3, 4]
print(num2) #[100, 2, 3, 4]

#(2)새로운 리스트를 만들어서 복사한다면?
num1 = [1, 2, 3, 4]
num2 = list(num1)
num2[0] = 100

print(num1) #[1, 2, 3, 4]
print(num2) #[100, 2, 3, 4]
profile
¡Bienvenido a mi velog!🐣

0개의 댓글

관련 채용 정보