리스트는 데이터들을 한 곳에 모아둔 것이다.
numbers = [2, 3, 4, 5, 6, 7]
strings = ["윤수", "영훈", "태훈"]
print(numbers) # [2, 3, 4, 5, 6, 7]
print(strings) # ["윤수", "영훈", "태훈"]
리스트에 같은 타입의 자료형만 와야 하는 것은 아니다.
파이썬에서 지원하는 자료형이라면 다 들어올 수 있다.
그러면 우리는 리스트에서 어떻게 원하는 값을 가져올 수 있을까?
인덱스를 배열에 적용시켜서 값을 가져올 수 있다.
numbers = [2, 3, 4, 5, 6]
Data 2 3 4 5 6
Index 0 1 2 3 4
인덱스는 항상 zero start이다.
인덱싱을 통해, 리스트의 요소를 하나의 변수로서 사용할 수 있다.
numbers = [2, 3, 4, 5, 6]
num1 = numbers[0]
num2 = numbers[1]
numbers[0] 이라는 리스트의 요소가 num1에 할당될 수 있다.
numbers[0]이 사실은 변수와 동일하다. 값을 추상화시키기 때문이다.
단지 네이밍을 이해하기 쉽게 바꿔주는 것 뿐이다.
만약에... 부여되지 않은 인덱스를 호출하면 어떻게 될까?
numbers = [2, 3 , 4 , 5 , 6 , 7]
numbers[10]
#Traceback (most recent call last): File "main.py", line 2, in <module> numbers[10]
#IndexError: list index out of range
IndexError를 발생시킨다.
파이썬에서는 인덱스를 헤드에서부터 부여하는 방식과, 테일에서부터 부여하는 방식 둘 다 지원한다.
Data 1 2 3 4 5
Index 0 1 2 3 4
ReverseIndex -5 -4 -3 -2 -1
위에서 인덱스를 이용하면 데이터를 "하나씩" 불러올 수 있다..!
그런데 만약에 범위를 지정해서 싹 긁어오고 싶다면..?
이럴때 사용하는 것이 리스트 슬라이싱이다.
numbers = [2, 3, 4, 5]
numbers[0:4] # [2,3,4,5]
numbers = [2, 3, 4, 5]
numbers[2:] # [4, 5]
numbers = [2, 3, 4, 5]
numbers[:2] # [2, 3]
len 함수는 리스트 요소의 개수를 반환한다.
numbers = [1,2,3,4]
#len은 리스트의 길이를 구할 때 사용
print(len(numbers)) # 4
append 함수는 리스트에 값을 추가하고 싶을 때 사용한다.
numbers = [1,2,3,4]
# append로 값을 추가하면, 가장 끝 인덱스에 값을 넣는다
numbers.append(5) # numbers = [1,2,3,4,5]
extend 함수는 append 함수와 유사한데, 리스트에 여러 값을 한 번에 넣고싶고, 중복 리스트를 원하지 않을 때 사용한다.
numbers = [1, 2, 3, 4]
numbers.extend([5, 6, 7, 8]) # numbers = [1,2,3,4,5,6,7,8]
# list로 파라미터를 전달하지만, 최종적으로는 데이터들만 들어감.
del은 위의 함수들과 다르게 keyword다. 리스트의 값을 지우고 싶을 때 사용한다.
numbers = [1,2,3,4]
del numbers[2]
print(numbers) # [1, 2, 4]
insert 함수는 원하는 위치에 원하는 값을 넣고싶을 때 사용한다.
numbers = [1,2,3,4]
numbers.insert(4, 5)
print(numbers) #[1,2,3,4,5]
함수에 대한 설명을 알고 싶을 때!
help()를 이용한다.
help(list.insert)
Help on method_descriptor:
>>> insert(self, index, object, /)
Insert object before index.
원본 배열을 해치지 않고, return값으로 정렬된 리스트를 반환함.
numbers = [19, 13, 2, 4, 5, 7, 3]
# reverse 파라미터를 넣지 않으면, 기본값은 false! 옵셔널 파라미터이다.
new_list = sorted(numbers) #오름차순
# reverse 파라미터를 넣으면 내림차순이다.
new_list = sorted(numbers, reverse = True) # 내림차순
아무 값도 return하지 않고, target_list의 값을 정렬 값으로 치환한다.
numbers = [19, 13, 2, 4, 5, 7, 3]
numbers.sort() # 오름차순
numbers.sort(reverse = True) # 내림차순
sorted() vs list.sort()
sorted()는 list를 파라미터로 받아서, temp 리스트에 값을 저장하고, 그 temp 리스트를 정렬 후 temp 리스트를 리턴
sort()는 list 자체의 값을 인덱스를 이용해서 크기를 비교한 후 값을 정렬시켜버린다.
만약 값을 찾는 내장 함수를 지원하지 않았다면 어떻게 구현할 수 있을까?
def find_(some_list, value):
i = 0
while i < len(some_list):
if some_list[i] == value:
return True
i += 1
return False
이를 파이썬에선 내장 함수를 지원한다.
data in list
data not in list
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23]
# 값이 primes 안에 있는지 확인
print(7 in primes) # True
print(12 in primes) # False
#값이 없는지 확인하려면 in 앞에 not을 써준다.
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23]
print(7 not in primes) # False
print(12 not in primes) # True
# 3X3 행열
grades = [[62, 75, 77], [78, 81, 86], [85, 91, 89]]
# 1행의 데이터
print(grades[0])
# 3행의 데이터
print(grades[2])
# 1행 1열의 데이터
print(grades[0][0])
# 3행 2열의 데이터
print(grades[2][1])
some_list의 원소들을 뒤집어진 순서, 즉 인덱스 0 ~ n 을 -1 ~ -(n+1)에 일대일 대응시킨다.
numbers = [5, 3, 7, 1]
numbers.reverse()
print(numbers) #[1, 7, 3, 5]
some_list에 target_data의 값을 갖고 있는 원소의 인덱스를 반환한다.
members = ["영훈", "윤수", "태호", "혜린"]
print(members.index("윤수")) # 1
print(members.index("태호")) # 2
some_list에서 첫 번째로 target_data의 값을 갖고 있는 원소를 삭제해준다.
fruits = ["딸기", "당근", "파인애플", "참외","파인애플"]
fruits.remove("파인애플")
print(fruits) # ['딸기', '당근', '참외', '파인애플']
튜플은 리스트와 몇 가지 다른 점을 제외하고는 거의 비슷하다.
() 로 값을 감싸준다삭제와 수정이 불가능하다.TypeError: 'tuple' object doesn't support item deletion
TypeError: 'tuple' object does not support item assignment
튜플은 리스트와 비슷해서 슬라이싱, 인덱싱, 더하기, 곱하기, 길이구하기 등이 가능하다.
a, b, c = (10, 20, 30)
man, wate, grap = 'yello', 'green', 'purple'
2021-09-10