프로그래밍/Python

📔파워 유저를 위한 파이썬 Express 06. 파이썬 자료구조 1(리스트)

카멜필름 2023. 5. 19. 23:41

Zip()함수

동시에 두 개 이상의 리스트를 반복하기 위해 zip()함수를 사용할 수 있다.

zip()함수는 2개의 리스트를 받아서 항목 2개 출력

 


점(.)

파이썬에서 모든 것은 객체(object)

객체는 관련되는 변수와 함수를 묶은 것

파이썬에서 리스트도 객체

객체 안에 있는 함수를 사용할 때는 객체의 이름을 쓰고 점(.)을 붙인 후에 함수의 이름을 적음


리스트 탐색하기

만약 값이 리스트에서 한 번 이상 등장한다면 탐색을 시작하는 위치를 index()함수로 넘길 수 있음

heroes=["아이언맨","토르","헐크","스칼렛위치","헐크"]
n=heroes.index("헐크",3) #n은 4가 된다

index("헐크", 3)은 인덱스 3부터 "헐크"를 찾음


요소 삭제하기

🔑항목이 저장된 위치를 알고 있다면 pop(i)를 사용

heroes=["아이언맨", "토르", "헐크"]
h=heroes.pop(1) #h는 '토르'

🔑항목의 값만 알고 있다면 remove(value)를 사용

heroes=["아이언맨","토르","헐크"]
heroes.remove("토르")

역순으로 리스트 정렬하기

키워드 인수인 reverse를 True로 설정하기

a=[3,2,1,5,4]
a.sort(reverse=True) #[5,4,3,2,1]

정렬 #2

sorted(): 크기순으로 정렬된 새로운 리스트를 반환

원래의 리스트는 수정되지 않음

numbers=[10,3,7,1,9,4,2,8,5,6]
ascending_numbers=sorted(numbers)
print(ascending_numbers)

리스트에서 사용할 수 있는 내장 함수

함수 설명
round() 주어진 자리수대로 반올림한 값을 반환
reduce() 특정한 함수를 리스트 안의 모든 요소에 적용하여 결과값을 저장하고 최종 합계만을 반환
sum()
ord() 유니코드 문자의 코드값 반환
cmp() 첫 번째 리스트가 두 번째보다 크면 1을 반환
max() 최댓값
min() 최솟값
all() 리스트 안의 모든 요소가 참이면 참을 반환
any() 리스트 안의 한 요소라도 참이면 참을 반환
len() 리스트의 길이 반환
enumerate() 리스트의 요소들을 하나씩 반환하는 객체 생성
accumulate() 특정한 함수를 리스트의 요소에 적용한 결과를 저장하는 리스트 반환
filter() 리스트의 각 요소가 참인지 아닌지를 검사

리스트에서 랜덤으로 선택하기

choice()

import random

numberList=[1,2,3,4,5,6,7,8,9,10]
print("랜덤하게 선택한 항목=", random.choice(numberList))

리스트 복사하기

temps=[28, 31,33, 35,27, 26, 25]
values=temps

리스트는 복사 안 됨. temps와 values는 동일한 리스트를 가리킴-> 🍋얕은 복사(Shallow Copy)

만약 values를 통하여 리스트 요소의 값을 변경한다면 temps 리스트도 변경됨

temps=[28, 31,33,35,27,26,25]
vaues=temps

print(temps) #temps리스트 출력
values[3]=39 #values 리스트 변경
print(temps) #temps리스트 변경됨

🍋깊은 복사(deep copy): 리스트를 올바르게 복사하는 방법

🔑list()사용

list(): 다른 리스트나 데이터들을 받아서 새로운 리스트를 생성하는 생성자 함수

temps=[28, 31,33, 35,27, 26, 25]
vaues=list(temps)

🔑슬라이싱 [:] 사용

new_numbers=numbers[:]

리스트와 함수

🍋값으로 호출하기(Call-by-Value): 함수로 변수를 전달할 때, 변수의 복사본이 함수로 전달되는 방법

🍋참조로 호출하기(Call-by-Reference): 함수로 변수를 전달할 때, 변수의 참조가 전달되는 방법. 함수에서 매개 변수를 통하여 원본 변수를 변경할 수 있음

 

파이썬에서는 정수나 문자열처럼 변경이 불가능한 객체들은 "값으로 호출하기" 방법으로 전달됨

개체의 참조값이 함수의 매개 변수로 전달되지만 함수 안에서 객체의 값을 변경하면 새로운 객체가 생성되기 때문

🔑불변 객체는 값이 변경되면 새로 생성됨

 

참조로 호출되는 경우: 리스트

변경 가능한 객체인 리스트를 함수에 전달하면 참조값으로 전달됨

def func2(list):
	list[0]=99
values=[0,1,1,2,3,5,8]
func2(values)
print(values)

원본 리스트 값도 변경됨


리스트 함축(list comprehensions)

comprehension: 함축, 포함, 내포

 

형식: [수식 for (변수 in 리스트) if (조건)]

예: squares=[x*x for x in range(10)]

-squares: 새로운 리스트

-x*x: 출력식으로 새로운 리스트의 요소가 됨

-x: 입력 리스트에 있는 요소 x에 대하여

-range(10): 입력 리스트

 

리스트 함축 사용하지 않는 경우: 반복문 사용

squares=[]

for x in range(10):
	squares.append(x*x)

조건 추가하는 경우

squares=[x*x fo x in range(10) if x%2==0]

리스트 내포에서 if문이 for문 앞에 오는 경우는 조건식을 적용한 결과를 리스트에 저장하고 싶을 때입니다. 즉, if문이 참인 원소들만 새로운 리스트에 넣고 싶을 때 사용합니다.

예를 들어, prices에서 0보다 큰 원소들만 추출하고 싶다면 다음과 같이 코드를 작성할 수 있습니다.

prices=[13,-545,922,356,-992,217]
mprices=[i for i in prices if i>0]
mprices

이 코드는 prices의 각 원소에 대해 if i>0이라는 조건식을 검사하고, 참인 경우에만 i를 mprices에 추가합니다. 따라서 mprices는 [13, 922, 356, 217]이라는 리스트가 됩니다.

반면에 리스트 내포에서 if문이 for문 뒤에 오는 경우는 조건식에 따라 원소의 값을 바꾸고 싶을 때입니다. 즉, if-else문을 사용하여 원소의 값을 변환하고 싶을 때 사용합니다.

예를 들어, prices에서 0보다 큰 원소들은 그대로 두고, 0보다 작은 원소들은 0으로 바꾸고 싶다면 다음과 같이 코드를 작성할 수 있습니다.

prices=[13,-545,922,356,-992,217]
mprices=[i if i>0 else 0 for i in prices]
mprices

이 코드는 prices의 각 원소에 대해 i if i>0 else 0이라는 조건식을 적용하고, 그 결과를 mprices에 저장합니다. 따라서 mprices는 [13, 0, 922, 356, 0, 217]이라는 리스트가 됩니다.

 


2차원 리스트를 함수로 넘기기

2차원 리스트를 s라고 하면 len(s)는 행의 개수이고 len(s[0])는 열의 개수이다.

len(s[0])는 첫 번째 행의 길이지만, 어차피 모든 행의 기이가 같기 때문에 2차원 리스트의 열의 개수로 사용할 수 있다.