티스토리 뷰

728x90
반응형

문법정리 2탄 - 리스트, 튜플, 집합, 사전

 


 

1. 리스트(list)

1)리스트

- 서로 다른 형의 항목 또는 같은 형의 항목들이 묶여 있는 복합 자료형

'''
리스트명 = [요소1, 요소2, ...]
리스트명 = [] # 빈 리스트 생성
'''

numbers = [2,3,4,5,6,7]

 

2)인덱싱(indexing)

numbers = [2,3,4,5,6,7]

print(numbers[0]) # 2
print(numbers[1]) # 3
print(numbers[5]) # 7
print(numbers[-1]) # 7
print(numbers[-6]) # 2

 

3)슬라이싱(slicing)

numbers = [2,3,4,5,6,7]

print(numbers[0:6]) # [2,3,4,5,6,7]
print(numbers[2:]) # [4,5,6,7]
print(numbers[:3]) # [2,3,4]

 

4)리스트 연산

(1) 덧셈 : +

a = [1,2,3]
b = [4,5,6]

print(a+b) # [1,2,3,4,5,6]

(2) 곱하기 : *

a = [1,2,3]
print(a * 3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]

 

5) 2차원 리스트

'''
리스트명 = [[요소1, 요소2], [요소1, 요소2], ...]
리스트명 = [] # 빈 리스트 생성

'''

numbers = [[1,2],[3,4],[5,6],[7,8]]

print(numbers[0][0]) # 출력 결과 : 1
print(numbers[0][1]) # 출력 결과 : 2
print(numbers[1][1]) # 출력 결과 : 4
print(numbers[3][1]) # 출력 결과 : 8


# 값 변경
numbers[2][0] = 10
print(numbers) # 출력 결과 : [[1, 2], [3, 4], [10, 6], [7, 8]]


# 값 추가
a = []
a.append([])
a[0].append(10)
a[0].append(20)

a.append([])
a[1].append(30)
a[1].append(40)

print(a) # 출력 결과 : [[10, 20], [30, 40]]
a[1].append(50)

 

 

6)그 외 리스트가 지원하는 기능

더보기

1. append(x) : 리스트 끝에 항목 더함  (a[len(a):] = [x] 와 같음)

a = [1,2,3]
b = [5,6,7]

a.append(4)
print(a) # 출력 결과 : [1, 2, 3, 4]

a.append(b)
print(a) # 출력 결과 : [1, 2, 3, 4, [5, 6, 7]]

 

2. extend(iterable) : 리스트 끝에 이터러블의 모든 항목을 덧붙여서 확장  (a[len(a):] = iterable 와 같음)

a = [1,2,3]
b = [5,6,7]

a.extend('a') # iterable이 아니면 에러남
print(a) # 출력 결과 : [1, 2, 3, 'a']

a.extend([4]) # a.extend(4)은 에러남
print(a) # 출력 결과 : [1, 2, 3, 'a', 4]

a.extend(b)
print(a)  # 출력 결과 : [1, 2, 3, 'a', 4, 5, 6, 7]

 

3. insert(i,x) : i 위치에 x 값을 삽입함 (a.insert(len(a),x) 와 a.append(x) 는 동등함)

a = [1,2,3]

a.insert(0,0)
print(a) # 출력 결과 : [0, 1, 2, 3]

 

4. remove(x) : 리스트에서 값이 x인 항목을 삭제함. 없으면  ValueError

a = [1,2,3]

a.remove(1)
print(a) # 출력 결과 : [2, 3]

 

5. pop([i]) : 리스트에서 i 위치에 있는 항목을 삭제하고 그 항목을 돌려줌.

i를 지정하지 않으면 마지막 항목을 삭제하고 돌려줌 (LIFO)

a = [1,2,3]

print(a.pop(0)) # 출력 결과 : 1
print(a.pop())  # 출력 결과 : 3
print(a.pop()) # 출력 결과 : 2

 

6. clear() : 리스트의 모든 항목 제거 

a = [1,2,3]

a.clear()
print(a) # 출력 결과 : []

 

7. index(x,start[,end]) : 리스트에 있는 항목 중 값이 x와 같은 첫번째 것의 0부터 시작하는 인덱스 반환.

항목 없으면 ValueError.

a = [1,2,3,5,3,6,7]

# 같은 값이 있을 경우, 앞에 있는 인덱스 출력 
# (start를 지정해주지 않으면 인덱스 0부터 시작하기 때문)
print(a.index(3)) # 출력 결과 : 2

print(a.index(3,3)) # 출력 결과 : 4

# end까지 정해주면 start ~ end-1 까지의 범위를 가짐
print(a.index(7,3,7)) # 출력 결과 : 6
print(a.index(7,3,6)) # 에러

 

8. count(x) : 리스트에서 x가 등장하는 횟수를 돌려줌

a = [1,2,3,5,3,6,7]

print(a.count(3)) # 출력 결과 : 2

 

9. sort() : 리스트 항목들을 제자리에서 정렬해줌

a = [20,16,4,6,44]

a.sort()
print(a) # 출력 결과 : [4, 6, 16, 20, 44]

 

10. reverse() : 리스트의 요소들을 제자리에서 뒤집음

a = [20,16,4,6,44]

a.reverse()
print(a) # 출력 결과 : [44, 6, 4, 16, 20]


11. values() : value 모두 반환

d = {
  5:25,
  2:4,
  3:9
}

print(d.values()) # 출력 결과 : dict_values([25, 4, 9])

 

12. copy() : 리스트의 얕은 사본을 돌려줌 (a[:] 와 같음)

a = [20,16,4,6,44]

b = a.copy()
c = a[:]
print(b) # 출력 결과 : [20,16,4,6,44]
print(c) # 출력 결과 : [20,16,4,6,44]

 

 

2. 튜플(tuple)

1)튜플

- 불변한 순서가 있는 객체의 집합, 리스트와 비슷하지만 한번 생성되면 값을 변경하거나 삭제할 수 없음

'''
변수명 = (요소1, 요소2, ...)
변수명 = () # 빈 튜플 생성
'''

t1 = ()
t2 = (1,)    # 요소가 1개일 땐, 뒤에 콤마 필수
t3 = (1,2,3)
t3 = 1,2,3   # () 생략 가능
t4 = ('a','b','c')

 

2)인덱싱(indexing)

t1 = (1,2,'a','b')

print(t1[0]) # 1
print(t1[-1]) # b

 

3)슬라이싱(slicing)

t1 = (1,2,'a','b')

print(t1[0:]) # (1, 2, 'a', 'b')
print(t1[:3]) # (1, 2, 'a')

 

4)튜플 연산

(1) 덧셈 : +

t1 = (1,2,3)
t2 = ('a','b','c')

print(t1+t2) # (1, 2, 3, 'a', 'b', 'c')

(2) 곱하기 : *

t1 = (1,2,3)

print(t1 * 3) # (1, 2, 3, 1, 2, 3, 1, 2, 3)

 

5)2차원 튜플

'''
변수명 = ((요소1, 요소2), (요소1, 요소2), ...) # 튜플안에 튜플 넣기
변수명 = ([요소1, 요소2], [요소1, 요소2], ...) # 튜플안에 리스트 넣기
변수명 = [(요소1, 요소2), (요소1, 요소2), ...] # 리스트안에 튜플 넣기
'''

t = ((10,20),(30,40),(50,60))
print(t[0][0]) # 출력 결과 : 10 
print(t[1][2]) # 출력 결과 : 40

 

 

3. 집합(set)

1)집합

- 중복되는 요소가 없는 순서 없는 컬렉션, 집합,차칩합 등의 수학적인 연산도 지원

'''
변수명 = set([iterable])
변수명 = set() # 빈 집합 생성
'''

s1 = set([1,2,3])
s2 = set()
s3 = set("hello")

print(s1) # 출력 결과 : {1, 2, 3}
print(s2) # 출력 결과 : set()
print(s3) # 출력 결과 : {'l', 'h', 'e', 'o'}
# 중복과 순서가 없기 때문에 위와 같이 출력됨

 

 

4. 사전(dictionary)

1)사전

- key 와 value 가 쌍을 이룬 자료형

'''
변수명 = {key1 : value1, key1 : value1, ...}
변수명 = dict() # 빈 사전 생성
'''

my_dictionary = {
  5:25,
  2:4,
  3:9
}

d = dict()

 

2)사전 요소 추가

'''
변수명[key] = value
'''

my_dictionary = {
  5:25,
  2:4,
  3:9
}

my_dictionary[1] = '안녕'

print(my_dictionary) # {5: 25, 2: 4, 3: 9, 1: '안녕'}

 

3)사전 요소 삭제

'''
del 변수명[key]
'''

my_dictionary = {
  5:25,
  2:4,
  3:9
}

del my_dictionary[3]

print(my_dictionary) # {5: 25, 2: 4}

 

4)사전의 키를 리스트로 만들기

'''
list(변수명)
'''

my_dictionary = {
  5:25,
  2:4,
  3:9
}

print(list(my_dictionary)) # [5, 2, 3]

 

5)그 외 사전이 지원하는 기능

더보기

1. len(변수명) : 항목 수 반환 

d = {
  5:25,
  2:4,
  3:9
}

print(len(d)) # 출력 결과 : 3

 

2. key in d : d에  key가 있으면 True, 아니면 Flase

d = {
  5:25,
  2:4,
  3:9
}

print(3 in d) # 출력 결과 : True

 

3. key not in d : d에  key가 있으면 ,False 아니면 True 

d = {
  5:25,
  2:4,
  3:9
}

print(3 in d) # 출력 결과 : Flase

 

4. iter(d) : 딕셔너리의 키에 대한 이터레이터 반환 

d = {
  5:25,
  2:4,
  3:9
}

print(iter(d)) # 출력 결과 : <dict_keyiterator object at 0x7f932922d2c0>

 

5. copy() : 딕셔너리의 얕은 복사본을 돌려줌

d = {
  5:25,
  2:4,
  3:9
}

d1 = d.copy() 
print(d) # 출력 결과 : {5: 25, 2: 4, 3: 9}
print(d1) # 출력 결과 : {5: 25, 2: 4, 3: 9}

 

6. clear() : 딕셔너리의 모든 항목 제거 

d = {
  5:25,
  2:4,
  3:9
}

d.clear()
print(d) # 출력 결과 : {}


7. get(key,[default]) : 딕셔너리에 key가 있으면 key의 value를 반환, 없으면 default 반환(기본값 None) 

d = {
  5:25,
  2:4,
  3:9
}

print(d.get(3)) # 출력 결과 : 9 
print(d.get(9)) # 출력 결과 : None
print(d.get(1,'없어요')) # 출력 결과 : 없어요

 

8. setdefault(key,[default]) : 딕셔너리에 key가 있으면 key의 value를 반환, 
없으면 default 반환(기본값 None)하고 key-value 추가해 줌

d = {
  5:25,
  2:4,
  3:9
}

print(d.setdefault(3)) # 출력 결과 : 9
print(d.setdefault(9)) # 출력 결과 : None
print(d.setdefault(1,'없어요')) # 출력 결과 : 없어요
print(d) # 출력 결과 : {5: 25, 2: 4, 3: 9, 9: None, 1: '없어요'}

 

9. items() : key,value 모두 반환

d = {
  5:25,
  2:4,
  3:9
}

print(d.items()) # 출력 결과 : dict_items([(5, 25), (2, 4), (3, 9)])

 

10. keys() : key 모두 반환 

d = {
  5:25,
  2:4,
  3:9
}

print(d.keys()) # 출력 결과 : dict_keys([5, 2, 3])


11. values() : value 모두 반환

d = {
  5:25,
  2:4,
  3:9
}

print(d.values()) # 출력 결과 : dict_values([25, 4, 9])

 

12. pop(key,[default]) : 딕셔너리에 key가 있으면 제거하고 그 값 반환, 없으면 default 반환(없으면 오류)

d = {
  5:25,
  2:4,
  3:9
}

print(d.pop(3)) # 출력 결과 : 9
print(d) # 출력 결과 : {5: 25, 2: 4}
print(d.pop(4,'지우지 못함')) # 출력 결과 : 지우지 못함
print(d) # 출력 결과 : {5: 25, 2: 4}

print(d.pop(4)) # 에러

 

13. popitem() : 딕셔너리에서 (key,value)쌍을 제거하고 돌려줌. 제거 순서는 LIFO

d = {
  5:25,
  2:4,
  3:9
}

print(d.popitem()) # 출력 결과 : (3, 9)
print(d) # 출력 결과 : {5: 25, 2: 4}
print(d.popitem()) # 출력 결과 : (2, 4)
print(d) # 출력 결과 : {5: 25}
print(d.popitem()) # 출력 결과 : (5, 25)
print(d) # 출력 결과 : {}

 

14. reversed() : 딕셔너리의 키에 대한 역순 이터레이터를 돌려줌

d = {
  5:25,
  2:4,
  3:9
}

print(reversed(d)) # 출력 결과 : <dict_reversekeyiterator object at 0x7f7fe6a25450>

 

15. update([other) : other이 제공하는 키/값 쌍으로 사전을 갱신

d = {5:25, 2:4, 3:9}
d1 = {'a':1, 'b':2} 

d1.update(a=10) # 키가 문자일 경우에만 사용
print(d1) # 출력 결과 : {'a': 10, 'b': 2}
d1.update(c=3) # 키가 없다면 새로 추가해 줌
print(d1) # 출력 결과 : {'a': 10, 'b': 2, 'c': 3}
d.update({5:1,3:8}) # 키가 숫자일 경우 
print(d) # 출력 결과 : {5: 1, 2: 4, 3: 8}
d.update(d1) # 사전끼리 합칠 수도 있음
print(d) # 출력 결과 : {5: 1, 2: 4, 3: 8, 'a': 10, 'b': 2, 'c': 3}

 

16. d | otehr (d |= d1) : d 와 other의 병합된 키와 값으로 새 딕셔너리 만듬

d = {5:25, 2:4, 3:9}
d1 = {'a':1, 'b':2} 

d = d | d1  # d |= d1 과 같음
print(d) # 출력 결과 : {5: 25, 2: 4, 3: 9, 'a': 1, 'b': 2}

 

728x90
반응형
댓글