[인공지능사관학교] Python (4) - 보충필요

Suhyeon Lee·2025년 6월 12일

map() 함수

  • map() 함수
    • 파이썬 내장 함수 중 하나
    • 주어진 함수를 반복 가능한(iterable) 객체(예: 리스트, 튜플)의 모든 요소에 적용하여 새로운 이터레이터(iterator)를 반환
    • 구조: map(함수, 반복 가능한 객체)
      • 함수: 적용할 함수를 지정
      • 반복 가능한 객체: 함수를 적용할 요소들이 포함된 iterable 객체를 지정
    • 함수를 요소별로 적용하고 그 결과를 새로운 iterable 객체로 생성할 때 사용
      • 반복 작업을 더 간단하고 효율적으로 수행하는 데 도움이 됨
# 리스트의 각 요소에 대해 제곱을 계산하는 함수
def square(x):
  return x * x

# 리스트 정의
numbers = [1,2,3,4]

# map 함수의 개념 -> map (함수1, 함수1 에 적용할 값(들) 또는 요소(들))
# map 함수 사용 (각 요소에 square 함수 적용)
result = map(square, numbers) # 반환 값은 이터레이터(iterable)

# 이 의미는 square 함수에 number리스트의 요소를 적용하겠다는 뜻
# 그런데 square 함수는 반환값이 x * x 이므로 1,2,3,4 를 보내면
# 1,4,9,16을 반환받고 이를 result에 저장함 
        
print('result type : ',type(result)) # 이때 result는 map 객체임 

# result는 (이터레이터)-> (map 객체) 이므로 리스트로 변환하여 출력
print(list(result))  # 출력: [1, 4, 9, 16]

파이썬 기초

주석

  • 코드를 설명하는 용도
    • Code의 양이 많거나 복잡하여 짧은 시간 내 이해하기 힘들 때 이해를 돕기 위해 사용
  • 코드를 잠시 보류하는 용도
    • 주석 처리된 문장은 실행되지 않기 때문

변수

입출력

숫자형

문자형

문자 활용

  • 문자열 인덱싱
    • 문자열을 문자 단위로 처리할 때(하나의 문자에 접근하고 싶을 때) 매우 유용
      • 문자열: 여러 개의 문자들이 모여 만들어진 하나의 라인
    • 한 글자만 추출하는 방법
  • 문자열 슬라이싱
    • 문자열에서 특정한 일부분을 추출하는 방법
    • 끝 인덱스는 '추출에 포함되지 않음'
    • [start:end:step]
      • step 알아보기
  • 문자열 사칙연산
    • 일부 사칙연산이 가능: +, *

형 변환

  • 하나의 데이터 타입(자료형)을 다른 데이터 타입(자료형)으로 변환하는 과정
    • 프로그래밍에서 아주 중요한 개념!
    • 파이썬은 다양한 타입을 다루기 때문에 자주 사용하게 됨
  • 파이썬에서는 내장 함수를 이용해 쉽게 형변환 가능
    • 내장 함수(built-in function)

POINT
☞ 형변환은 데이터 타입을 변경하는 과정
☞ 파이썬에서는 내장 함수를 사용해 형변환 수행
☞ 모든 타입이 다른 모든 타입으로 변환될 수 있는 건 아님
→ 변환하려고 하는 데이터의 형태마다 그 가능성이 달라짐
☞ 형변환은 사용자의 입력을 처리하거나 데이터 분석, 텍스트 처리 등 다양한 상황에서 사용될 수 있음

int()

  • 실수를 정수로 변환할 때 무조건 소수점 이하가 버려지는 특징이 있음
    • 반올림, 올림이 되지 않는다!
  • 숫자로 바꿀 수 없는 데이터가 있는 경우 오류 발생
    • 문자열을 정수로 변환해야 할 때는 해당 문자열이 실제로 숫자만 포함하고 있어야 한다는 점을 유의해야 함

형변환의 중요성 예시

  • 문자열에 + 연산자를 이용하면 문자열과 문자열이 더해지는 연산

  • input() 함수는 사용자의 입력을 항상 '문자열'로 반환하기 때문에 실제로 숫자 연산을 하기 위해서는 형변환이 필요함

  • 형변환 후 숫자 연산이 이루어짐

str()

  • 다른 데이터 형태에서 '문자열'로의 형변환은 거의 모든 자료형에 대해서 가능함

bool()

  • 값이 없는 경우: "거짓"으로 평가되어 False를 반환
    • bool() 함수에 전달된 객체
      • 0
      • False
      • 빈 문자열
      • 빈 리스트
      • 빈 튜플
      • 빈 딕셔너리
      • None 등
  • 값이 있는 경우: "참"으로 평가되어 True를 반환

The bool() function returns the boolean value of a specified object.
The object will always return True, unless:
The object is empty, like [], (), {}
The object is False
The object is 0
The object is None

dict()

  • 딕셔너리로 변환할 수 있는 데이터의 형태는 극히 제한적임
    • 가장 일반적인 방법은 키와 값 쌍의 리스트/튜플 데이터를 변환하는 것

set()

  • set 자료형의 특징을 기억해 두면 좋음
    • 중복을 허용하지 않음
    • 순서를 보장하지 않음
      • 알파벳의 순서(문자열의 순서)가 보장되지 않고 뒤죽박죽으로 바뀜
      • 출력의 순서가 입력의 순서와 다를 수 있음

연산자

논리 연산자

고급 연산자

비트 연산자

  • 숫자를 이진수로 변환한 후에 각 비트 단위로 연산 수행
  • ~ 연산자
    • 숫자의 모든 비트를 뒤집음
  • 비트 연산자는 복잡하지만 알고리즘 최적화나 파이썬을 통해 하드웨어(그래픽 카드 등)을 제어해야 할 때 유용하게 사용될 수 있음: 특정 알고리즘이나 하드웨어 제어에 유용

파이썬은 내부적으로 2의 보수를 어떻게 표현할까?
파이썬은 임의 정밀도를 지원하기 때문에 부호는 별도 필드로 갖고 있으며, 비트 연산이 필요할 때만 2의 보수로 변환하는 작업을 함.

※ 파이썬에서 비트 not 연산(~ 연산자)

  • 입력 값의 각 비트를 반전시키고, 이 값은 2의 보수로 표현됩니다.
    • 2의 보수란 숫자의 합을 2의 제곱수로 만들어 주기 위해 더해줘야 하는 수입니다.
      (각 자릿수의 값을 1에서 빼버리고 1을 더하여 얻을 수 있는 보수)
      • 1010의 2의 보수는 0110
        1111 - 1010 +1
      • 10101010의 2의 보수는 01010110
        11111111 - 10101010 + 1
num = 5  # 101 (2진수)
not_num = ~num  # -6 (2의 보수)

print(bin(num))  # 0b101
print(bin(not_num))  # -0b110
  • 5를 2진수로 표현하면 0101
  • ~5를 구하기 위해 전부 뒤집으면 1010
    • 이걸 우리가 아는 방식으로 해석하기 위해서는 역으로 풀어야 함
      • 1010에서 1을 빼 주면 1001
      • 여기서 1의 보수를 취하면 0110
      • 이건 6인데 앞에 부호가 1이 붙었으니(MSB) 결론은 "-6"
num = -4
not_num = ~num

print(not_num) # 3
print(bin(num)) # -0b100
print(bin(not_num)) # 0b11
  • '-4'를 연산자로 뒤집어보려면 먼저 컴퓨터가 인식하는 '-4'를 구해야 함
    • 양수 4에 해당하는 2의 보수 구하기
      • 0 0100 →2의 보수→ 1 1100
        (한 칸 떨어진 0/1은 MSB(sign bit)를 이해하기 위해 추가해 둠)
  • 1 1100을 뒤집으면 0 0011
    • MSB(sign bit)가 0 → 따로 보수를 취해서 음수를 구할 필요가 없음
    • 따라서 3이 출력됨

할당 연산자

  • 변수에 값을 할당하는 연산자
  • 코드를 보다 간결하게 만들어 주는 특징이 있음
  • 다른 연산자와 결합해서 쓸 수 있음
    • +=, -=, *=
      (&=도 가능)

연산자 우선순위

식별 연산자

  • 두 객체가 동일한 메모리 위치를 가리키는지 확인하는 연산자
    • 파이썬은 동일한 문자열이 있는 경우 일반적으로 같은 메모리 위치를 참조하는 특성이 있음
      • 리스트나 딕셔너리 같은 객체는 동일한 값을 가지더라도 다른 메모리 위치에 값을 위치시킴
    • C, C++ 언어의 포인터와 유사한 개념

  • c = coffee
    • coffee가 가리키고 있던 메모리 상의 주소를 c에게도 동일하게 공유하겠다는 의미

멤버 연산자

  • 특정한 값이 시퀀스 자료형에 포함되어 있는지 확인하는 연산자

리스트

튜플

딕셔너리

집합

조건식

반복문

profile
2 B R 0 2 B

0개의 댓글