파이썬 리스트 #5

반영환·2023년 4월 29일

파이썬

목록 보기
5/17
post-thumbnail

파이썬 리스트

리스트

리스트는 데이터들을 한 곳에 모아둔 것이다.

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

리스트 슬라이싱

위에서 인덱스를 이용하면 데이터를 "하나씩" 불러올 수 있다..!

그런데 만약에 범위를 지정해서 싹 긁어오고 싶다면..?

이럴때 사용하는 것이 리스트 슬라이싱이다.

list[ start_index : limit_index ]

numbers = [2, 3, 4, 5]

numbers[0:4] # [2,3,4,5]

list[ start_index : ]

numbers = [2, 3, 4, 5]

numbers[2:] # [4, 5]

list[ : limit_index ]

numbers = [2, 3, 4, 5]

numbers[:2] # [2, 3]

CRUD 함수

len( [ target_list ] )

len 함수는 리스트 요소의 개수를 반환한다.

numbers = [1,2,3,4] 

#len은 리스트의 길이를 구할 때 사용
print(len(numbers)) # 4

append( target_data )

append 함수는 리스트에 값을 추가하고 싶을 때 사용한다.

numbers = [1,2,3,4] 

# append로 값을 추가하면, 가장 끝 인덱스에 값을 넣는다

numbers.append(5) # numbers = [1,2,3,4,5]

extend( [ target_data ] )

extend 함수는 append 함수와 유사한데, 리스트에 여러 값을 한 번에 넣고싶고, 중복 리스트를 원하지 않을 때 사용한다.

numbers = [1, 2, 3, 4] 
numbers.extend([5, 6, 7, 8]) # numbers = [1,2,3,4,5,6,7,8] 

# list로 파라미터를 전달하지만, 최종적으로는 데이터들만 들어감.

del list[ target_index ]

del은 위의 함수들과 다르게 keyword다. 리스트의 값을 지우고 싶을 때 사용한다.

numbers = [1,2,3,4] 

del numbers[2]

print(numbers) # [1, 2, 4]

insert( target_index, target_data )

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.

정렬

sorted( target_list, reverse = False )

원본 배열을 해치지 않고, return값으로 정렬된 리스트를 반환함.

numbers = [19, 13, 2, 4, 5, 7, 3] 

# reverse 파라미터를 넣지 않으면, 기본값은 false! 옵셔널 파라미터이다.
new_list = sorted(numbers)  #오름차순 

# reverse 파라미터를 넣으면 내림차순이다.
new_list = sorted(numbers, reverse = True) # 내림차순

target_list.sort( reverse = False )

아무 값도 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

기타

Nested_List[ row ][ col ]

# 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.reverse()

some_list의 원소들을 뒤집어진 순서, 즉 인덱스 0 ~ n 을 -1 ~ -(n+1)에 일대일 대응시킨다.

numbers = [5, 3, 7, 1] 
numbers.reverse() 
print(numbers) #[1, 7, 3, 5]

some_list.index( target_data )

some_list에 target_data의 값을 갖고 있는 원소의 인덱스를 반환한다.

members = ["영훈", "윤수", "태호", "혜린"] 
print(members.index("윤수")) # 1
print(members.index("태호")) # 2

some_list.remove( target_data )

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

profile
최고의 오늘을 꿈꾸는 개발자

0개의 댓글