[Jungle][TIL] 240322 : 파이썬 리스트, 튜플 | 얕은복사, 깊은 복사 | 소수 찾기

somi·2024년 3월 22일
0

[Krafton Jungle]

목록 보기
4/68

2024.03.22 TIL

  • 파이썬 리스트와 튜플의 차이
  • list => 원소를 변경할 수 있는 mutable list형 객체
  • tuple => 원소에 순서를 매겨 결합, 원소를 변경할 수 없는 immutable 자료형. 튜플은 리스트와 다르게 결합 연산자를 생략할 수 있다.
    -> 튜플의 경우에는 값 바꾸기, append(), insert(), remove(), sort(), `reverse()에서는 에러가 발생하게 된다!
my_list = [1, 2, 3, 4, 5]
my_tuple = (1, 2, 3, 4, 5) 
tuple = 1, 2, 3 
  • 수정 불가능한 객체를 immutable 객체라고 부르고 수정 가능한 객체를 mutable 객체
    - mutable vs. immutable
    Immutable : 숫자(number), 문자열(string), 튜플(tuple)
    Mutable : 리스트(list), 딕셔너리(dictionary), NumPy의 배열(ndarray)

  • 깊은 복사: 참조값 뿐만 아니라 참고하고 있는 객체 자체를 복사하는 방식
    : 파이썬 copy.deepcopy()메소드
  • 얕은 복사: 객체를 복사할 때 참조값만 복사하는 방식 copy.copy()메소드
import copy

# 원본 리스트
original_list = [1, 2, [3, 4]]

# 깊은 복사
deep_copied_list = copy.deepcopy(original_list)

# 변경 전 출력
print("Original List:", original_list)
print("Deep Copied List:", deep_copied_list)

# 내부 리스트 변경
original_list[2][0] = 'a'

# 변경 후 출력
print("Original List:", original_list)
print("Deep Copied List:", deep_copied_list)

깊은 복사의 경우 -> original_list의 내부 리스트 값을 변경해도 deep_copied_list의 값은 변하지 않는다.


  • enumerate()
    순회 가능한(iterable) 객체(리스트, 튜플, 문자열 등)를 입력으로 받아 해당 객체의 각 요소에 대해 인덱스와 값을 함께 반환하는 내장 함수
my_list=  ['hi', 'hello', 'ho']

for index, value in enumerate(my_list):
    print(index, value)

enumerate()를 사용하면 인덱스와 값을 함께 출력할 수 있다!


  • 파이썬에서 if __name__ == "__main__": 왜 쓰는가 ?
    : 메인 함수의 선언, 시작을 의미

파일을 import 할 떄, 다른 스크립트에서 import한 파일의 코드 블록이 실행되지 않도록 하기 위함 !


소수 찾기

소수란 2부터 n-1까지 어떤 소수로도 나누어지지 않는다.

for n in range(2, 1001):
	for i in range(2,n):
    	counter +=1 
        if n % i ==0:
        	break
            
    else:
    	print(n)


counter = 0
ptr = 0
prime = [None] * 500

prime[ptr] = 2
ptr +=1

for i in range(3, 1001, 2):
    for j in range(1, ptr):
        counter +=1 #나누는 횟수
        if i % prime[j] ==0:
            break
    else:
        prime[ptr] = i
        ptr += 1

print(prime)
        

소수란 n의 제곱근 이하의 어떤 소수로도 나누어 떨어지지 않는다.

def is_prime_number(n):
	end = int(n**(1/2))
    for i in range(2, end+1):
    	if n % i ==0:
        	return False
    return True 

counter = 0 #곱셈과 나눗셈을 더한 횟수 
ptr = 0
prime = [None] * 500

prime[ptr] =2 
ptr +=1 

prime[ptr] = 3
ptr += 1

for i in range(5, 1001, 2):
	j = 1 
    while prime[j]*prime[j] <= i:
    	
    	if i % prime[j]

잘 모르겠고, 더 이해해야 하는 부분..!

counter = 0 #곱셈과 나눗셈의 횟수의 합 
ptr = 0
prime = [None]*500

prime[ptr] = 2
ptr +=1
prime[ptr] = 3
ptr +=1

for i in range(5, 1001, 2):
    j = 1
    while prime[j]*prime[j] <= i:
        counter +=1
        if i % prime[j] == 0:
            break
        j +=1
    else:
        prime[ptr] = i
        counter += 1
        ptr +=1

print(prime)

소수 찾기

하노이 탑

8 퀸

profile
📝 It's been waiting for you

0개의 댓글