728x90
리스트
리스트명 = [값1, 값2, 값3, ...]
aa = [] # 빈 리스트 생성
aa.append(0) # 항목 추가
aa.append(1)
aa.append(2)
len(aa) # 3, 리스트 항목 개수
aa[-1] # 2, 맨 뒤에서부터 -1
aa[0:2] # [0, 1, 2]
bb = [3, 4, 5]
aa + bb # [0, 1, 2, 3, 4, 5]
aa * 3 # [0, 1, 2, 0, 1, 2, 0, 1, 2]
cc = [10, 20, 30, 40, 50, 60, 70, 80, 90]
cc[::2] # [10, 30, 50, 70, 90] 건너뛸 때 사용
cc[::-2] # [90, 70, 50, 30, 10]
한 리스트에 다양한 데이터형을 섞어서 만들 수 있음
- 리스트 값 변경 & 삭제
aa = [10, 20, 30]
aa[1] = 200
aa # [10, 200, 30]
aa[1:2] = [200, 201]
aa # [10, 200, 201, 30]
aa[1] = [30, 40]
aa # [10, [30, 40], 201, 30]
del(aa[1])
aa # [10, 201, 30]
bb = [10, 20, 30, 40, 50]
bb[1:4] = []
bb # [10, 50]
- 리스트 자체 삭제
1. aa = [];
2. aa = None; # 출력하면 아무 것도 안나옴
3. del(aa); # 오류 발생
- 리스트 조작 함수
함수 | 설명 | 사용법 |
append() | 리스트 제일 뒤에 항목을 추가한다 | 리스트.append(값) |
pop() | 리스트 제일 뒤의 항목을 빼내고 삭제한다 | 리스트.pop() |
sort() | 리스트 항목을 정렬한다 | 리스트.sort() |
reverse() | 리스트 항목을 역순으로 정렬한다 | 리스트.reverse() |
index() | 지정한 값을 찾아 위치를 반환한다 | 리스트.index(찾을값) |
insert() | 지정한 위치에 값을 삽입한다 | 리스트.insert(위치,값) |
remove() | 지정한 값을 삭제한다(여러 개면 첫 번째만) | 리스트.remove(지울값) |
extend() | 리스트 뒤에 리스트를 추가한다 | 리스트.extend(추가할리스트) |
count() | 리스트에서 찾을 값의 개수를 센다 | 리스트.count(찾을값) |
clear() | 리스트의 내용을 모두 지운다([]만 남음) | 리스트.clear() |
del() | 리스트에서 해당 위치의 항목을 삭제한다 | del(리스트[위치]) |
len() | 리스트에 포함된 전체 항목의 개수를 센다 | len(리스트) |
copy() | 리스트의 내용을 새로운 리스트에 복사한다 | 새로운리스트 = 리스트명.copy() |
sorted() | 리스트의 항목을 정렬해서 새로운 리스트에 대입한다 | 새로운리스트 = sorted(리스트) |
- 컴프리헨션: 순차적인 리스트를 간단히 만들 수 있음
numList = [num for num in range(1,21) if num % 3 == 0]
# 리스트 = [수식 for 항목 in range() if 조건식]
- zip() 함수: 동시에 여러 리스트에 접근 가능
foods = ['떡볶이', '짜장명', '라면', '피자', '맥주', '치킨', '삼겹살']
sides = ['오뎅', '단무지', '김치']
for food, side in zip(foods, sides) :
print(food, '-->', side)
'''
결과값:
떡볶이 --> 오뎅
짜장면 --> 단무지
라면 --> 김치
'''
- 리스트의 복사
newList = oldList # 얕은 복사: 동일한 메모리 공간을 공유하게 됨
newList = oldList[:] # 깊은 복사: 메모리의 공간을 복사해서 새로 만듦
newList = oldList.copy() #도 가능
튜플
튜플의 값은 수정할 수 없으며, 읽기만 가능
소괄호 생략 가능 but 항목이 하나일 때에는 뒤에 쉼표(,)를 붙여야 함
tt1 = (10, 20, 30);
tt2 = 30, 40, 50;
tt3 = 10,
tt4 = (10,)
del(tt1[0]) # 에러 발생
del(tt1) # 튜플 자체 삭제는 가능
tt1 + tt2 # (10, 20, 30, 40, 50, 60)
tt1[0:2] # (10, 20)
- 튜플, 리스트 서로 변환 가능: tuple(), list()
myTyple = (10, 20, 30)
myList = list(myTuple)
myList.append(40)
myTuple = tuple(myList)
myTuple # (10, 20, 30, 40)
딕셔너리
{Key:Value} 쌍으로 구성. 키는 유일해야 함
순서가 없음
student1 = {'학번':1000, '이름':'홍길동', '학과':'컴퓨터학과'}
student1['연락처'] = '010-1111-2222'
del(student1['학과'])
student1 # {'학번':1000, '이름':'홍길동', '연락처':"010-1111-2222"}
student1['이름'] # '홍길동' //없는 키를 요청하면 오류
student1.get('이름') # '홍길동' //없는 키를 요청하면 아무것도 반환 x
# Key 값만
student1.keys() # dict_keys(['학번', '이름', '학과'])
list(student1.keys()) # ['학번', '이름', '학과']
# Value 값만
student1.values() # dict_values([1000, '홍길동', '컴퓨터학과'])
# .items() 함수를 이용해 튜플 형태로 구할 수 있음
student1.items() # dict_items([('학번', 1000), ('이름', '홍길동'), ('학과', '컴퓨터학과')])
# in을 통해 딕셔너리 안에 특정 키값이 있는지 확인 가능
'이름' in student1 # True
- 딕셔너리의 정렬
import operator
traninDic, trainList = {}, []
trainDic = {'Thomas':'토마스', 'Edward':'에드워드', 'Henry':'헨리', 'Gothen':'고든', 'James':'제임스'}
trainList = sorted(trainDic.items(), key = operator.itemgetter(0)) # 0은 키, 1은 값 기준 정렬
print(trainList)
# [('Edward':'에드워드'), ('Gothen':'고든'), ('Henry':'헨리'), ('James':'제임스'), ('Thomas':'토마스')]
세트
키만 모아 놓은 딕셔너리의 특수한 형태
중복된 키는 자동으로 하나만 남음, 순서 없음
set() 함수를 통해 세트로 변경 가능
- 두 세트 사이의 교집합, 합집합, 차집합, 대칭 차집합
mySet1 = {1, 2, 3, 4, 5}
mySet2 = {4, 5, 6, 7}
mySet1 & mySet2 #교집합 {4, 5}
mySet1 | mySet2 #합집합 {1, 2, 3, 4, 5, 6, 7}
mySet1 - mySet2 #차집합 {1, 2, 3}
mySet1 ^ mySet2 #대칭 차집합 {1, 2, 3, 6, 7}