Immersion In Data

Python/혼자 공부하는 파이썬

[Python] 4-1. 집합 자료형, 리스트와 반복문

sungjunminn 2022. 10. 21. 12:21

1. 리스트

리스트 선언하고 요소에 접근하기 

기본형태
[요소, 요소, 요소...]

list_a = [273, 32, 103, "문자열", True, False]
list_a[-1] # False
list_a[-2] # True
list_a[3][0] # 문  => 인덱스 3 인 문자열을 가져오고 거기서 0번째 인덱스
  • 리스트는 한 가지 자료형만으로도 구성할 수 있고 여러 종류의 자료형으로도 구성할 수 있다.
  • 대괄호 안에 음수를 넣어 역순으로 요소를 선택할 수 있다.
  • 리스트 접근 연산자를 이중으로 사용할 수 있다.
  • 리스트 안에 리스트를 사용할 수 있다.
  • 리스트의 길이를 넘는 인덱스 접근시 IndexError 예외

 

리스트 연산하기 : 연결(+), 반복(*), len()

list_a = [1,2,3]
list_b = [4,5,6]

print(list_a + list_b) # [1,2,3,4,5,6]
print(list_a * 3) # [1,2,3,1,2,3,1,2,3]
print(len(list_a)) # 3
print(len(list_b)) # 3

 

리스트에 요소 추가하기: append, insert, extend 

  • 리스트명.append(요소) : 리스트 뒤에 요소 추가
  • 리스트명.insert(위치,요소) : 리스트 중간에 추가, 해당 위치의 요소는 뒤로 밀림
  • 리스트명.extend(리스트) : 매개변수로 리스트를 입력받아 원래 리스트 뒤에 새로운 리스트의 요소를 모두 추가
list_a = [1,2,3]
list_a.append(4) # [1,2,3,4]
list_a.insert(1,5) # [1,5,2,3,4]
list_a.extend([1,2,3]) # [1,5,2,3,4,1,2,3]

cf) 리스트 연결 연산자와 요소 추가의 차이
+와 *의 연산자의 경우 본래 변수에는 어떠한 변화도 없는 비파괴적 처리이고 append, insert, extend 의 요소 추가의 경우 본래 변수에 영향을 주는 파괴적 처리이다.

 

리스트 요소 제거하기 : del, pop, remove, clear 

  • del 리스트명[인덱스] : 특정 인덱스 요소 제거, 범위 지정 가능
  • 리스트명.pop(인덱스) : 특정 인덱스 요소 제거, 매개변수 미입력시 자동으로 -1이 들어가 마지막 요소 제거
  • 리스트.remove(값) : 값을 지정해서 가장 먼저 발견되는 하나만 제거
  • 리스트.clear() : 리스트 내부의 요소를 모두 제거
list_a = [0,1,2,3,4,5]

del list_a[1] # [0,2,3,4,5]
list_a.pop(2) # [0,2,4,5]
del list_a[0:3] # [5]

list_b = [1,2,1,2]
list_b.remove(2) # [1,1,2]
list_b.clear() # []

 

리스트 정렬하기 : sort()

  • sort() : 기본 정렬 기능으로 오름차순으로 정렬한다.
  • sort(reverse = True) : 내림차순으로 정렬한다.
a = [1,4,3]
a.sort()
print(a) # [1,3,4]
a.sort(reverse = True)
print(a) # [4,3,1]

 

리스트 내부에 있는지 확인하기: in, not in 

  • 값 in 리스트 : 있으면 True 없으면 False
  • 값 not in 리스트 : 없으면 True 있으면 False
list_a = [1,2,3]
print(1 in list_a)  # True
print(5 not in list_a) # True

 

 

2. for 반복문 

기본 형태

for 반복자 in 반복할 수 있는것 :
    코드
arr = [273,32,103, 57, 52]

for i in arr
     print(arr)

# 출력
273
32
103
57
52


# 문자열
for i in "안녕"
    print(i)

# 출력
안
녕

 

 

3. 집합 자료형 

집합은 기본적으로 리스트 혹은 문자열을 이용해서 만들 수 있는데, 다음과 같은 특징이 있다.

  • 중복을 허용하지 않는다.
  • 순서가 없다.

리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있다. 반면에 사전 자료형과 집합 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다는 특징이 있다. 이와 더불어 집합 자료형에서는 키가 존재하지 않고, 값 데이터만을 담게 된다. 특정 원소가 존재하는지를 검사하는 연산의 시간 복잡도는 사전 자료형과 마찬가지로 O(1)이다.

 

초기화 방법

set() 함수를 이용하거나, 중괄호 {} 안에 각 원소를 콤마를 기준으로 구분해서 넣으면 된다.

data = set([1,1,2,3,4,4,5])
print(data) # {1,2,3,4,5}

data = {1,1,2,3,4,4,5}
print(data) # {1,2,3,4,5}

# 완전 같은 1,1은 중복이 제거되고 순서가 다른 1,2 2,1은 유지된다.
# 중복순열을 찾을 때 사용할 수 있다.
data = {(1,1),(1,1),(2,1),(1,2)} 

 

집합 자료형의 연산

기본적인 집합 연산으로는 합집합(|), 교집합(&), 차집합(-) 연산이 있다.

a= {1,2,3,4,5}
b = {3,4,5,6,7}
print(a|b) # {1,2,3,4,5,6,7}
print(a&b) # {3,4,5}
print(a-b) # {1,2}

 

집합 자료형 관련 함수

  • add() : 추가(O(1))
  • update() : 여러 개의 값을 한 번에 추가
  • remove() : 특정 값 제거 (O(1)) - 없다면 예외 발생
  • discard() : 특장 값 제거 - 없어도 예외 발생하지 않음
data = {1,2,3}
data.add(4) # {1,2,3,4}
data.update({5,6}) # {1,2,3,4,5,6} # ([5,6]) 도 가능
data.remove(3) # {1,2,4,5,6}
data.remove(3) # 3이 없으므로 예외 발생
data.discard(3) # 3이 없어도 예외가 발생하지 않음

 

집합 인덱싱

list로 형변환을 시켜준 뒤 접근한다.

data = {1,2,3}
data = list(data)
print(data[0]) # 1

 

 

 

‘혼자 공부하는 파이썬’을 읽고 공부한 내용을 바탕으로 작성하였습니다.