파이썬 공부중/파이썬 기초

Python 기초 #4 리스트, 튜플, 집합, 자료구조의 확인과 변경

책다니엘 2023. 3. 7. 04:45

1. 튜플(Tuple)

  • 값의 변경이 불가능(Immutable)합니다.
  • 대괄호 [] 대신 소괄호 ()로 값을 감싸서 생성합니다.
  • 인덱싱(indexing)과 슬라이싱(slicing)을 통해 원하는 값을 추출할 수 있습니다.
  • 주로 함수에서 여러 개의 값을 반환할 때 사용됩니다.

2. 리스트(List)

  • 값의 변경이 가능(Mutable)합니다.
  • 대괄호 []로 값을 감싸서 생성합니다.
  • 인덱싱(indexing), 슬라이싱(slicing), 추가(append), 삭제(remove), 수정(replace) 등 다양한 메서드를 사용할 수 있습니다.
  • 순서가 있는 자료형으로, 인덱싱과 슬라이싱을 통해 원하는 값을 추출할 수 있습니다.

3. 세트(Set)

  • 중복을 허용하지 않는(Unordered) 자료형입니다.
  • 중괄호 {}나 set() 함수를 사용하여 생성합니다.
  • 합집합(union), 교집합(intersection), 차집합(difference) 등의 집합 연산을 제공합니다.
  • 원소의 순서가 정해져 있지 않습니다.

이들 자료형은 각각의 특성에 따라 사용되는 상황이 다릅니다. 예를 들어, 값을 수정해야 할 때는 리스트를 사용하고, 중복을 제거하거나 집합 연산이 필요한 경우에는 세트를 사용하는 것이 좋습니다. 튜플은 값의 변경이 불가능하므로, 값이 변하지 않아야 하는 상황에서 사용됩니다.

# 리스트
# 대괄호 사용
# 지하철 칸 별로 10명, 20명, 30명일 때

subway = [10, 20, 30]
print(subway)

subway = ["유재석", "조세호", "박명수"]
print(subway)

# 조세호는 몇 번째 칸에 타고 있는가?
print(subway.index("조세호")) # = 1

# 하하가 중간에 탄 경우
subway.append("하하")
print(subway) # = ['유재석', '조세호', '박명수', '하하']

# 정형돈을 유재석 / 조세호 사이에 태울 때
subway.insert(1, "정형돈")
print(subway) # = ['유재석', '정형돈', '조세호', '박명수', '하하']

# 지하철에 있는 사람을 한 사람씩 뒤에서 꺼냄
subway.pop()
print(subway) # = ['유재석', '정형돈', '조세호', '박명수']

# 같은 이름의 사람이 몇 명 있는지 확인
subway.append("유재석") # = ['유재석', '정형돈', '조세호', '박명수', '유재석']
print(subway.count("유재석")) # = 2

# 정렬도 가능
num_list = [5,2,4,3,1]
num_list.sort()
print(num_list) # = [1,2,3,4,5]

# 순서 뒤집기 가능
num_list.reverse()
print(num_list) # = [5,4,3,2,1]

# 모두 지우기
num_list.clear()
print(num_list) # = []


# 다양한 자료형 함께 사용
mix_list = ["조세호", 20, True]
print(mix_list)

# 리스트 확장
num_list = [5,4,3,2,1]
num_list.extend(mix_list)
print(num_list) # = [5, 4, 3, 2, 1, '조세호', 20, True]
 
 
 
 
# 튜플 = 괄호!

menu = ("돈까스", "치즈까스")
print(menu[0]) # = 돈까스
print(menu[1]) # = 치즈까스

# 튜플에는 값을 추가하거나 변경하는 것은 불가능, menu.add("생선까스")는 불가능

# 튜플은 여러 변수를 한 번에 선언 가능

'''
name = "김종국", age = 20, hobby = "운동"일 경우
(name, age, hobby) = ("김종국", 20, "운동")으로 선언 가능하다
'''

(name, age, hobby) = ("김종국", 20, "운동")

print(name)
print(age)
print(hobby)



# 집합(set) -> 중복 안 됨, 순서 없음, 중괄호 사용

my_set = {1,2,3,3,3}
print(my_set) # = {1,2,3}

java = {"유재석", "양세형", "김태호"}
python = set(["유재석", "박명수"])

# 교집합(java 그리고 python 가능한 개발자)
print(java & python) # = {'유재석'}
print(java.intersection(python)) # = {'유재석'}

# 합집합(java 또는 python 가능한 개발자)
print(java | python) # = {'양세형', '김태호', '유재석', '박명수'}
print(java.union(python)) # = {'양세형', '김태호', '유재석', '박명수'}

# 차집합(java는 가능하지만 python은 할 줄 모르는 개발자)
print(java - python) # = {'김태호', '양세형'}
print(java.difference(python)) # = {'김태호', '양세형'}

# python을 할 줄 아는 개발자가 추가된 경우
python.add("김태호")
print(python) # = {'유재석', '박명수', '김태호'}

# java를 할 줄 아는 개발자가 줄어든 경우
java.remove("김태호")
print(java)



# 자료구조의 변경
# 커피숍이라고 할 때

menu = {"커피", "우유", "쥬스"}
print(menu, type(menu)) # = {'커피', '우유', '쥬스'} <class 'set'>

menu = list(menu)
print(menu, type(menu)) # = ['쥬스', '커피', '우유'] <class 'list'>

menu = tuple(menu)
print(menu, type(menu)) # = ('쥬스', '커피', '우유') <class 'tuple'>