본문 바로가기
Python

파이썬 복습

by shulk 2023. 11. 11.

1. 삼항연산자 변수 대입

조건문에서 참,거짓일때  둘다 어떤 같은 변수에 대입하려하면 이때 참의 경우 행동쪽에 변수를 같이 적어주고 거짓의 행동일땐 값만 넣어준다

ex)  answer = 1 if num1 == num2 else -1

 

2. 타입 확인 함수 isinstance()
* isinstance(확인하고자 하는 데이터 값, 확인하고자 하는 데이터 타입)  반환은 True,False

ex) if isinstance( 6 , int ) 

 

3.  "".join(리스트) 문자열 합치기

예를들어 a = ["3","1","2"] 있을때 문자열로 합치고 싶으면 "".join(a) 이렇게 하면 "321" 이다. 

만약 구분자 넣어주면 -> "_".join(a)  하면 "3_2_1" 

 

4. 두 변수 a,b 값을 서로 교환할때

a = 3 b = 4 가 있을때  a =  4 b = 3 으로 서로 교환해서 변경하고 싶다

이럴때는 a,b = b,a 하면된다!

(자바는 이런게 안되고 임시변수 temp에 a값 넣고 변경하고 하는데 파이썬은 바로 가능)

 

5. 리스트에서 특정 문자열 인덱스 찾기 index() , find()

둘다 리스트에서 특정 문자열 몇번째에 있는지 찾을 수 있는데 차이점은 index()는 찾는 문자열 없을경우 예외 발생하고

find()는 -1을 출력한다

앞에서 부터 말고 뒤에서부터 찾고 싶을땐 rfind() , rindex()

 

6. 리스트 요소 비어 있나 확인

len() 을 이용해서 구분하거나 

if not check_list:  이렇게 not 을 이용해서 확인 할 수도 있다.

 

7. 리스트 내부에서 반복문 값에 조건문 추가하는 방법

answer = [i for i in [5, 7, 9, 10] if i % 5 == 0]

 

8.  "문자열".isdigit()  숫자인지 판별 하는 함수

실수나 음수는 판단하지 못하고 True,False 반환한다.

print("3df".isdigit())  
# False 출력

print("33464".isdigit())  
# True 출력

 

9. zip() 메소드

여러 개의 순회 가능한(iterable) 객체를 인자로 받고, 각 객체가 담고 있는 원소를 튜플의 형태로 차례로 접근할 수 있는 반복자(iterator)를 반환한다.

zip() 함수로 2개의 튜플의 데이터를 엮은 후 리스트로 변환

 

10. 최대공약수,최소공배수  gcd , lcm 메소드

math를 이용해서 최대공약수,최소공배수 구할 수 있다.

최대공약수 => math.gcd(숫자들)  ex) math.gcd(66, 22, 11) # 11 반환

최소공배수=> math.lcm(숫자들)   ex) math.lcm(66, 22, 11) # 66 반환

하지만 이 방법은 파이썬 3.9버전 이후부터 가능해서 알고리즘 문제에서는 사용 주의!

 

11.  int(문자열,n진법) => 10진법으로 변환

예를들어 3진법 0021을 10진법으로 변환 하려할때 int(문자열n진법) 몰랐을땐 일일이 반복문을 통해서 제곱하고 더하고 했는데 int() 메소드에 저런 신기한 기능이 있었다!!

int("0021",3) 하면 해당 문자 "0021"을 3진법 계산으로 10진법으로 변환 시켜준다 

print(int("0021", 3)) # 10진법 변환한 7 출력

 

12. combination 

순서를 고려하지 않고 조합의 경우를 구할때 사용

(프로그래머스 삼총사 문제 참고)

import itertools

arr = ['A', 'B', 'C']
result = itertools.combinations(arr, 2)
print(list(result))

# [('A', 'B'), ('A', 'C'), ('B', 'C')] 출력
from itertools import combinations

def solution(nums):
    answer = 0

    for i in combinations(nums,3):
        print(type(i))

    return answer

print(solution([1,2,7,6,4]))
#출력
(1, 2, 7)
(1, 2, 6)
(1, 2, 4)
(1, 7, 6)
(1, 7, 4)
(1, 6, 4)
(2, 7, 6)
(2, 7, 4)
(2, 6, 4)
(7, 6, 4)

13. sum( 2차원 리스트, [] ) 

프로그래머스 최소직사각형 문제 풀다가 다른 사람 풀이 보고 알았는데 원리는 모르나 

sum( [ [1,2],[3,4] ] , [] ) 이렇게 할시 합쳐진 1차원 리스트로 변한다.  => [1,2,3,4] \

 

14. 아스키코드 연산 ord() , chr()

아스키코드를 문자열로 변환할때 chr()  =>  chr(65)   #A

문자열을 아스키코드로 변환할때 ord() => ord(A)  # 65

 

15. replace()

replace는 문자열을 변경하는 함수이다. 문자열 안에서 특정 문자를 새로운 문자로 변경하는 기능을 가지고 있다. 사용 방법은 '변수. replace(old, new, [count])' 형식으로 사용한다.
- old : 현재 문자열에서 변경하고 싶은 문자
- new: 새로 바꿀 문자
- count: 변경할 횟수. 횟수는 입력하지 않으면 old의 문자열 전체를 변경한다. 기본값은 전체를 의미하는 count=-1로 지정되어있다. 

 

그리고 replace()는 반환을 해서 변수 지정을 해야한다.

>>> a = 'hello world'
>>> a.replace('hello','hi')
hi world

 

16. pop(인덱스)

해당 인덱스 요소를 pop한다.

a=[1,2,3,4]
a.pop(2)
print(a) #[1,2,4] 출력

 

17. reverse,reversed 차이

* reverse

my_list = [1, 2, 3, 4, 5]
 
my_list.reverse()
 
print(my_list)  # [5, 4, 3, 2, 1] 출력

 

* reversed

my_list = [1, 2, 3, 4, 5]
 
your_list = reversed(my_list)
 
print(your_list)

#<list_reverseiterator object at 0x0000014E1C76EFD0> 출력

 

결국 sort 와 sorted와 마찬가지로 반환값이 있냐 없냐 차이다.

reverse는 반환값이 없고 reversed는 반환값이 있어서

이렇게 예를들어 반복문에 reverse 하면 에러가 뜬다. 그러므로 반복문에서는 reversed사용

 

my_list = [1, 2, 3, 4, 5]
 
for count in my_list.reverse():
    print(count)

 

18. for-else문

보통 else는 if 문이랑 사용하는데 파이썬에서는 for문이랑도 같이 사용 가능하다.

for문이 중간에 break 등으로 끊기면 else문은 실행 안하고 안끊기면 실행한다는거다.

예를들어 이렇게 3일때 break걸리는데 이떄는 else문 실행안한다. 만약 반복문안 if문이 i==9일경우에는 else문 실행한다.

num=[1,3,5]
for i in num:
    if i == 3:
        break
else:
    print("끝")


18. groupby()문

Python의 itertools.groupby() 함수는 연속된 요소들을 그룹화합니다. 반환되는 결과는 키 값과 해당 키에 속하는 요소들로 이루어진 반복 가능한 객체(iterable)입니다.

[k for k, j in groupby(a)]에서 j는 각 그룹에 해당하는 요소들을 담은 iterator입니다. 즉, k는 그룹의 키 값이고, j는 해당 그룹의 요소들을 담고 있는 iterator입니다.

그룹화된 요소를 순회하거나 이를 리스트 등으로 변환하려면 j를 활용할 수 있습니다. 만약 각 그룹의 요소들을 리스트로 얻고 싶다면, 다음과 같이 작업할 수 있습니다:

from itertools import groupby

a = [1, 1, 2, 1, 1]

# 중복된 연속된 요소 제거
result = [k for k, _ in groupby(a)]

print(result)  # 결과 출력: [1, 2, 1]
from itertools import groupby

a = [1, 1, 2, 3, 3, 3]

result = [list(j) for k, j in groupby(a)]
print(result)  # 결과 출력: [[1, 1], [2], [3, 3, 3]]

 

19. 파이썬의 클래스변수,전역변수

global 키워드는 모듈 수준의 전역 변수를 정의하고 접근할 때 사용됩니다. 반면, 클래스 변수는 클래스 정의 내부에 위치하며 클래스의 모든 인스턴스에서 공유됩니다. 클래스 변수에 접근할 때 global 키워드를 사용할 필요는 없습니다

전역변수의 경우

result = 0  # 모듈 수준의 전역 변수

class Service:
    def add(self):
        global result  # 모듈 수준의 전역 변수를 사용
        result += 1
        return result

service1 = Service()
print(service1.add())  # 출력: 1
print(service1.add())  # 출력: 2

클래스 변수의 경우 

self.__class__ 를 해서 접근하거나  매개변수 self말고 원하는거로 예를들어 cls 적었을경우 cls.result += 1  할수있고

아니면 클래스 속성인 자바 스태틱처럼 Service.result += 1  할 수 있다.

class Service:
    result = 0  # 클래스 변수

    def add(self):
        self.__class__.result += 1  # 클래스 변수에 접근하여 수정
        return self.__class__.result

service1 = Service()
service2 = Service()

print(service1.add())  # 출력: 1
print(service2.add())  # 출력: 2
print(service1.add())  # 출력: 3

 

20. 파이썬의 self

Python에서 self는 클래스의 인스턴스 메서드에서 해당 인스턴스 자신을 가리키는 예약어입니다. self를 사용하면 클래스의 인스턴스 변수와 메서드에 접근할 수 있습니다. 이는 객체 지향 프로그래밍에서 중요한 개념으로, 클래스 인스턴스가 자신을 참조하여 동작할 수 있게 합니다. 

이러면 지역변수랑 인스턴스 변수랑 무슨 차이지 하는데 보면

인스턴스 변수

  • 정의 위치: 클래스의 메서드 내에서 self 키워드를 사용하여 정의됩니다.
  • 생명 주기: 클래스의 인스턴스가 존재하는 동안 유지됩니다.
  • 접근 범위: 클래스의 다른 메서드에서 self를 통해 접근할 수 있습니다.
  • 목적: 객체의 상태를 저장하고 유지하기 위해 사용됩니다.

지역 변수

  • 정의 위치: 함수나 메서드 내부에서 정의됩니다.
  • 생명 주기: 변수가 정의된 함수나 메서드가 실행되는 동안만 유지됩니다.
  • 접근 범위: 변수가 정의된 함수나 메서드 내에서만 접근할 수 있습니다.
  • 목적: 함수나 메서드 내에서 일시적으로 데이터를 저장하기 위해 사용됩니다.
class MyClass:
    def __init__(self, value):
        self.value = value  # 인스턴스 변수 정의

    def increment(self):
        self.value += 1  # 인스턴스 변수 접근 및 수정

    def get_value(self):
        return self.value  # 인스턴스 변수 반환

# 인스턴스 생성
obj = MyClass(10)

print(obj.get_value())  # 출력: 10
obj.increment()
print(obj.get_value())  # 출력: 11

 

21. 파이썬의 __init__ 메소드

__init__ 메서드는 파이썬에서 클래스의 생성자(constructor)로 작동합니다. 객체가 생성될 때 자동으로 호출되며, 객체의 초기화 작업을 수행합니다. 이를 통해 클래스 인스턴스가 생성될 때 필요한 초기 설정을 할 수 있습니다.

__init__ 메서드는 클래스 인스턴스를 초기화하기 위해 사용됩니다. 첫 번째 매개변수는 항상 self이며, 이는 생성된 인스턴스를 참조합니다. __init__ 메서드의 나머지 매개변수는 객체를 초기화하는 데 필요한 추가 인수를 받을 수 있습니다.

class MyClass:
    def __init__(self, value):
        self.value = value  # 인스턴스 변수 초기화

# 인스턴스 생성
obj = MyClass(10)
print(obj.value)  # 출력: 10

 

22. 대문자,소문자 확인 , 대소문자 변경,첫문자만 대문자 나머지 소문자

 

  • isupper(): 문자가 대문자인 경우 True를 반환합니다.
  • islower(): 문자가 소문자인 경우 True를 반환합니다.
char = 'A'

# 대문자인지 확인
if char.isupper():
    print(f"'{char}'는 대문자입니다.")

# 소문자인지 확인
if char.islower():
    print(f"'{char}'는 소문자입니다.")

 

 

소문자를 대문자로, 대문자를 소문자로 변경하는 메소드는 swapcase()입니다.

text = "Hello World!"
swapped_text = text.swapcase()
print(swapped_text)

# hELLO wORLD!

 

첫문자만 대문자로 변경하고 나머진 소문자로 하는 메소드는 capitalize() 입니다.

text = "hello WORLD!"
capitalized_text = text.capitalize()

print(capitalized_text)  # 출력: "Hello world!"

 

23. 제곱, 제곱근 메소드

제곱은 ** 를 사용해서 할 수 있고,아니면 pow() 메소드 이용한다.

x = 4
squared = pow(x, 2)  # 4의 제곱 = 16
print(squared)

제곱근은 math.sqrt() 함수 사용

import math

x = 16
square_root = math.sqrt(x)  # 16의 제곱근 = 4
print(square_root)

아니면 ** 이용하면서 수학적으로 0.5 제곱을 한다

x = 16
square_root = x ** 0.5  # 16의 제곱근 = 4
print(square_root)

'Python' 카테고리의 다른 글

파이썬 비동기 프로그래밍 asyncio  (0) 2025.01.08
Python Ray 라이브러리 (병렬처리)  (0) 2025.01.07