코딩테스트/알고리즘 (Python) ★★★

[코테 대비 1] 파이썬 자료구조 총정리(list, tuple, dict)

개발자딥게 2022. 7. 27. 19:19
반응형

01. random.sample( range(n,m),  cnt)

n 부터 m-1 사이 랜덤값을 꺼내 cnt 길이의 리스트 반환

import random

randList = random.sample(range(1, 11), 10)
print(randList)

02. random.randrange(number) 

0부터 number -1 사이의 랜덤값 1개 반환

import random

print(random.randrange(100)) # 1~99 사이의 값 1개 반환

 


list

 

1. 리스트 선언

대괄호와 콤마를 이용하여 리스트를 선언한다.

students = ['홍길동', '김철수']
numbers = [1,2,3,4,5]
mixed = [1, '이', 3, [4,5,6]]

 

2. 리스트 아이템 조회

인덱스를 이용하여 아이템 조회가 가능하다. 인덱스는 0부터 부여됨.

numbers = [1,2,3,4,5]

print(numbers[0]) # 1

 

3. 리스트 길이

리스트 안에 들어있는 아이템의 갯수를 의미한다. len( ) 내장함수 이용.

numbers = [1,2,3,4,5]

len(numbers) # 5

 

4. 리스트 for 반복문

1차원 리스트는 변수 1개면 됨

numbers = [1,2,3,4,5]

for n in numbers:
    print(n)
    
for i in range(len(numbers)):
    print(numbers[i])

2차원 리스트는 변수 2개 주면 데이터에 쉽게 접근할 수 있음 (이중반복문 또는 인덱스 불필요)

# -------------------------
# 이차원 리스트 

studentNumbers = [[1,20], [2,21], [3,20]]

for classNo, cnt in studentNumbers:
    print( classNo, cnt)

 

5. 리스트 enumerate( ) 함수

인덱스와 아이템을 한번에 조회할 수 있는 내장함수

sports = ['농구', '축구', '야구', '배구', '마라톤']

for idx, value in enumerate(sports):
    print('{} : {}'.format(idx, value))
    
    
# 0 : 농구
# 1 : 축구
# 2 : 야구
# 3 : 배구
# 4 : 마라톤

 

6. 아이템을 리스트 맨 뒤에 추가하기 append( )

append( ) 함수를 사용하면 리스트에 아이템을 추가할 수 있다.

sports = ['농구', '축구', '야구', '배구', '마라톤']

sports.append('수영')
print(sports) # ['농구', '축구', '야구', '배구', '마라톤', '수영']

7. 아이템을 특정 인덱스 위치에 추가하기 insert( )

sports = ['농구', '축구', '야구', '배구', '마라톤']

sports.insert(0, '수영') # 0번 인덱스에 데이터 추가, 뒤로 밀려남
print(sports) # ['수영', '농구', '축구', '야구', '배구', '마라톤']

 

8. 리스트의 마지막 아이템을 삭제하기 pop( )

sports = ['농구', '축구', '야구', '배구', '마라톤']

last = sports.pop() # 마지막 데이터 삭제됨
print(sports) # ['농구', '축구', '야구', '배구']
print(last) # 마라톤

9. 리스트의 특정 인덱스 값을 삭제하기 pop( idx )

sports = ['농구', '축구', '야구', '배구', '마라톤']

data = sports.pop(3) # 인덱스 3인 데이터 삭제됨
print(sports) # ['농구', '축구', '야구', '마라톤']
print(data) # 배구

10. 리스트의 특정 아이템을 삭제하기 remove( value )

# 해당 아이템이 중복되어 들어있다면 가장 앞에 있는 값을 삭제한다.

# 리스트에 해당 아이템이 존재하지 않으면 오류 발생.

sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']

data = sports.remove('배구') # '배구' 라는 값 삭제
print(sports) # ['농구', '축구', '야구', '마라톤', '배구', '배구']
print(data) # None

# 중복된 아이템 모두 삭제하고자 할 때 while 문 + in 메서드를 사용한다.

sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']

item = '배구'
while item in sports:
    sports.remove(item)
    
print(sports) # ['농구', '축구', '야구', '마라톤']

 

11. 리스트 연결하기

(1) extend( ): 리스트1에 리스트2를 연결하여 리스트1을 확장한다.

groupA = ['a', 'b', 'c']
groupB = [1, 2, 3, 4, 5]

groupA.extend(groupB)

print(groupA) # ['a', 'b', 'c', 1, 2, 3, 4, 5]
print(groupB) # [1, 2, 3, 4, 5]

(2) 뎃셈 연산자 +: 리스트1과 리스트 2를 연결하여 리스트3을 생성한다.

groupA = ['a', 'b', 'c']
groupB = [1, 2, 3, 4, 5]

groupC = groupA + groupB

print(groupA) # ['a', 'b', 'c']
print(groupB) # [1, 2, 3, 4, 5]
print(groupC) # ['a', 'b', 'c', 1, 2, 3, 4, 5]

 

12. 리스트 아이템 정렬하기 sort( ) 오름차순 / sort ( reverse = True ) 내림차순

문자 숫자 모두 정렬 가능하다.

groupA = ['cat', 'apple', 'banana']
groupB = [4, 1, 3, 2, 5]

groupA.sort()
groupB.sort(reverse = True)

print(groupA) # ['apple', 'banana', 'cat']
print(groupB) # [5, 4, 3, 2, 1]

 

13. 리스트 아이템 순서 뒤집기 reverse( )

sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
sports.reverse()
print(sports) # ['배구', '배구', '마라톤', '배구', '야구', '축구', '농구']

 

14. 리스트 슬라이싱 [n:m]

# list의 인덱스 n 부터 m-1까지 슬라이싱한다.

sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
print(sports[1:3]) # ['축구', '야구']

# 인덱스를 생략하면 끝까지를 의미한다.

sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']

# 인덱스 안쓰면 끝까지를 포함
print(sports[:3])  # ['농구', '축구', '야구']
print(sports[3:])  # ['배구', '마라톤', '배구', '배구']

# 전체
print(sports[:])  # ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']

# 인덱스는 음수도 가능하다.

sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']

# 음수도 가능
print(sports[-5:-2])  # ['야구', '배구', '마라톤']

# 슬라이싱의 단계(step)를 설정할 수 있다.

sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']

print(sports[1:6:2]) # ['축구', '배구', '배구']
print(sports[::2]) # ['농구', '야구', '마라톤', '배구']

# 슬라이싱을 이용해 아이템을 변경할 수 있다.

sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
sports[:2] = ['basket ball', 'soccer']

print(sports) # ['basket ball', 'soccer', '야구', '배구', '마라톤', '배구', '배구']

 

15. 리스트 슬라이싱 리스트명[ slice(n,m) ]

sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
sports[slice(2,4)]

print(sports) # ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']
print(sports[slice(2,4)]) # ['야구', '배구']

 

16. 리스트 곱셈 연산 list * n

리스트 내 아이템을 n배로 늘린다.

num = [1, 2]
print(num*2) # [1, 2, 1, 2]

 

17. 리스트 아이템의 위치(인덱스) 찾기 index( value )  또는   index( value, startIndex, endIndex )

범위 내 가장 맨 앞에 있는 아이템의 인덱스를 반환한다.

아이템이 없으면 오류 반환

sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']

sports.index('배구') # 3
sports.index('배구', 4, 6) # 5

 

18. 리스트 내 특정 아이템의 개수를 알아내기 count( )

sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']

print(sports.count('배구')) # 3
print(sports.count('야구')) # 1
print(sports.count('수영')) # 0

 

19. 리스트 내 특정 아이템 삭제하기 del ( )

# 범위 내 가장 맨 앞에 있는 아이템을 삭제한다.

sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']

del sports[0] # 농구 삭제
del sports[0] # 축구 삭제
del sports[0] # 야구 삭제
print(sports) # ['배구', '마라톤', '배구', '배구']

# 슬라이싱으로 다수 아이템 삭제가 가능하다.

sports = ['농구', '축구', '야구', '배구', '마라톤', '배구', '배구']

del sports[4:] # '마라톤', '배구', '배구' 삭제
print(sports) # ['농구', '축구', '야구', '배구']

 

 

 


tuple

1. 튜플 선언은 소괄호 ( )

튜플은 한번 선언되면 아이템을 수정하거나 삭제할 수 없다

다양한 자료형을 혼합하여 아이템으로 사용할 수 있다.

numbers = (1, 2, 3, 4, 5, [1,2,3], (1,2,3))
 
print(numbers) # (1, 2, 3, 4, 5, [1, 2, 3], (1, 2, 3))
numbers[0] = 0 # 불가

 

2. 튜플 아이템 조회하기

인덱스 이용하여 해당 데이터 조회가 가능하다.

numbers = (1, [1,2,3], (1,2,3))
 
print(numbers[0]) # 1
print(numbers[1]) # [1, 2, 3]
print(numbers[2]) # (1, 2, 3)

 

3. 튜플 in, not in 키워드 사용하기

# 아이템 존재 유무를 확인할 수 있다.

sports = ['농구', '축구', '야구', '배구']

print('농구' in sports) # True
print('수영' in sports) # False

# 문자열 에서도 in, not in 키워드 사용가능하다.

pythonStr = '파이썬 python은 고급프로그래밍 언어로, ' \
            '플랫폼에 독립적이며 인터프리터식 대화형 언어이다. '\
            '파이썬이라는 이름은 코미디 이름에서 따온 것이다.'
            
print('파이썬' in pythonStr) # True
print('파이선' in pythonStr) # False
print('python' in pythonStr) # True

 

4. 튜플 길이 확인하기 len ( )

sports = ('농구', '배구', '야구')
print(len(sports)) # 3

 

5. 튜플 결합하기

튜플은 한번 선언되면 수정할 수 없기 때문에 extend 안됨. 덧셈연산자로 결합 가능하다.

sports1 = ('농구', '배구', '야구')
sports2 = ('축구', '당구', '수영')

sports3 = sports1 + sports2

print(sports1) # ('농구', '배구', '야구')
print(sports2) # ('축구', '당구', '수영')
print(sports3) # ('농구', '배구', '야구', '축구', '당구', '수영')

튜플이 아닌 데이터를 튜플과 결합하기 위해선, 형변환이 필요하다.   튜플 형변환   (num , )

numbers = (1,2,3)
num = 10

total = numbers + num # 오류 발생

total = numbers + (num,) # 형이 다른 데이터는 튜플로 형변환 한 후 결합할 수 있다.
print(total) # (1, 2, 3, 10)

 

 

6. 튜플 슬라이싱 하기

리스트 슬라이싱과 동일. 단, 슬라이싱을 통한 데이터 변경, 수정은 안됨. 

튜플을 선언할 떈 소괄호 ( ) 썼지만, 아이템에 접근할 땐 대괄호 [ ] 를 사용한다.

numbers = (1,2,3,4,5,6,7,8,9,10)

print(numbers[0:5]) # (1, 2, 3, 4, 5)
print(numbers[5:9]) # (6, 7, 8, 9)
print(numbers[:]) # (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
print(numbers[-5:]) # (6, 7, 8, 9, 10)

 

 

7. 튜플 아이템 정렬하기 sort( ) 와 sorted( )

sort( ) : 원본을 수정함. 튜플은 수정이 불가하기 때문에, 리스트로 형변환 후 정렬 가능하다.

numList = [4,7,2,8,9,3,1,10]
numTuple = (4,7,2,8,9,3,1,10)

numList.sort() # 리스트는 sort() 가능
numTuple.sort() # 튜플은 sort() 불가능

print(numList) # [1, 2, 3, 4, 7, 8, 9, 10]
print(numTuple) # X

sorted( ) : 리스트로 반환해줌. 튜플의 아이템을 정렬하여 리스트로 반환해준다. 따라서 튜플 자료형에서도 사용가능

numList = [4,7,2,8,9,3,1,10]
numTuple = (4,7,2,8,9,3,1,10)

newList = sorted(numList) # 리스트는 sort() 가능
newTuple = sorted(numTuple) # 튜플은 sort() 불가능

print(newList) # [1, 2, 3, 4, 7, 8, 9, 10]
print(newTuple) # [1, 2, 3, 4, 7, 8, 9, 10]

 

8. 튜플 for 반복문 이용하기

이중 튜플은 변수를 2개 둬서 값을 조회할 수 있다. 인덱스 없이 가능

studentNum = ( (1,20), (2,21), (3,20) )

for num, stu in studentNum:
    print(num, stu)
    
# 1 20
# 2 21
# 3 20

 

9. 튜플과 리스트의 형변환

리스트와 튜플은 자료형 변환이 가능하다. list( ) tuple( )

numList = [1,2,3,4,5,6,7,8,9,10]
numTuple = tuple(numList)
numList2 = list(numTuple)

print(type(numList))  # <class 'list'>
print(type(numTuple)) # <class 'tuple'>
print(type(numList2)) # <class 'list'>

 

 

 


dict

1. 딕셔너리 선언. 중괄호 { }를 이용한다.

딕셔너리는 key와 value를 이용하여 자료를 관리한다.

student1 = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}
student2 = {'이름': '이영희', '나이':5, '취미':['노래부르기', '영화보기']}
student3 = {'이름': '홍길동', '나이':20, '취미':['피아노', '노래부르기']}

students = {1:student1, 2:student2, 3:student3}

 

2. 딕셔너리 조회하기

# key 값을 이용하여 value를 조회할 수 있다. 딕셔너리는 인덱스로 조회 불가능

student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}

print(student['이름']) # 김철수
print(student['나이']) # 12
print(student['취미']) # ['독서', '노래부르기']


print(student['취미'][0]) # 독서
print(student['취미'][1]) # 노래부르기

# get (key)를 이용해 value를 조회할 수 있다.

딕셔너리에 key가 없어도 에러가 발생하지 않는다. None 반환

student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}

print(student.get('이름')) # 김철수
print(student.get('영어 이름')) # None

 

 

3. 딕셔너리 추가하기

key-value 쌍으로 데이터를 추가할 수 있다.

myInfo = { } # 딕셔너리 선언

myInfo['이름'] = '김철수'
myInfo['나이'] = 12
myInfo['취미'] = ['노래부르기', '피아노']

print(myInfo) # {'이름': '김철수', '나이': 12, '취미': ['노래부르기', '피아노']}

 

 

4. 딕셔너리 수정하기

같은 key로 데이터를 입력할 경우, 값이 수정된다.

myInfo = { } # 딕셔너리 선언

myInfo['이름'] = '김철수'
myInfo['나이'] = 12
myInfo['나이'] = 20

print(myInfo) # {'이름': '김철수', '나이': 20}

 

 

5. keys() 와 values()

전체 key 반환, 전체 value 반환해주는 함수로, list( )로 형 변환 해줘야 리스트 자료형 된다.

student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}

print(student.keys())   # dict_keys(['이름', '나이', '취미'])
print(student.values()) # dict_values(['김철수', 12, ['독서', '노래부르기']])

print(list(student.keys()))   # ['이름', '나이', '취미']
print(list(student.values())) # ['김철수', 12, ['독서', '노래부르기']]

items()

리스트 안에 key-value 를 튜플 형태로 받아온다.

student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}

print(student.items())   # dict_items([('이름', '김철수'), ('나이', 12), ('취미', ['독서', '노래부르기'])])
print(list(student.items())) # [('이름', '김철수'), ('나이', 12), ('취미', ['독서', '노래부르기'])]

# 딕셔너리는 인덱스로 조회 불가함. keys() 이용하여 value에 접근 가능하다.

student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}

for info in student.keys():
    print(student[info])
    
# 김철수
# 12
# ['독서', '노래부르기']

 

6. 딕셔너리 삭제하기

del

student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}

del student['이름']
del student['나이']

print(student) # {'취미': ['독서', '노래부르기']}

pop ( ) 삭제한 데이터를 반환해준다.

student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}

name = student.pop('이름')
age = student.pop('나이')

print(student) # {'취미': ['독서', '노래부르기']}
print(name) # 김철수
print(age) # 12

 

7.  딕셔너리 in, not in 키워드를 사용하여 키 존재 유무 확인하기

student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}

print('이름' in student) # True
print('성별' in student) # False

 

8. 딕셔너리 len( )을 사용하여 아이템의 개수를 확인하기

student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}

print(len(student)) # 3

 

9. 딕셔너리 clear( )를 사용하여 딕셔너리 내 모든 데이터를 삭제한다.

student = {'이름': '김철수', '나이':12, '취미':['독서', '노래부르기']}
student.clear()

print(student) #  {} 빈 딕셔너리
반응형