프로그래머스 문제풀기

➡️문자열 내림차순으로 배치하기

def solution(s):
    return ''.join(sorted(list(s),reverse=True))

리스트로 안바꿔도 문자열도 sorted 쓸 수 있당 ㅎㅅㅎ

파이썬

파이썬 특징

  1. 파이썬의 주요 특징에 대해 이야기 해보세요.
    파이썬은 스크립트 언어로 컴파일을 하지 않고 바로 인터프리터가 소스코드를 한 줄씩 읽어가며 바로 실행하여 실행결과를 빠르게 확인하고 수정할 수 있습니다. 또한 운영체제마다 따로 컴파일할 필요가 없어 운영체제에 구애받지 않고 동작이 가능합니다. 또한 동적 타입 언어로 변수의 자료형을 지정하지 않고 선언할 수 있는 등 다른 언어보다 형식을 익히기 쉬운 편입니다.
  • 오픈소스: 저작권자가 소스 코드를 공개하여 누구나 별다른 제한 없이 자유롭게 사용 · 복제 · 배포 · 수정할 수 있는 소프트웨어
    • 소프트웨어:
    • 라이브러리: 파이썬 프로그램을 작성할 때 불러와 사용할 수 있는 이미 작성되어있는 파이썬 파일의 모음
  • 간결함
  • 스크립트 언어로 컴파일 과정이 필요하지 않아 실행결과를 바로 확인하고 수정할 수 있음
  • 컴파일이 필요없어 어떤 운영체제에서도 동작가능함
  • 개발 속도가 빠르다
    "Life is too short, You need python."
  • C나 C++로 만든 프로그램을 파이썬에서 사용할 수 있으며, 파이썬으로 만든 프로그램 역시 C나 C++에서 사용할 수 있다.
  • 넘파이(NumPy): 수치 연산 모듈. C로 작성되어 파이썬에서도 수치 연산을 빠르게 할 수 있다.
  • 데이터베이스에 접근하기 위한 도구를 제공
  • 머신러닝 프로그램을 작성하기에 가장 적합한 도구
    사이킷런(scikit-learn), 텐서플로(Tensorflow), 파이토치(PyTorch), 케라스(Keras) 등의 라이브러리 제공
  • 모바일 앱 개발이 어려움

리스트 vs 튜플

  1. 파이썬에서 list와 tuple의 차이점에 대해 말해보세요
    리스트와 튜플의 차이점은 변환이 가능한지입니다. 리스트는 변환이 가능한 자료형으로 요소 값을 수정하는 것이 가능하지만 튜플은 불가능합니다. 이 차이점때문에 튜플이 리스트보다 생성이 더 빠르고 더 적은 메모리를 사용합니다.
  • 차이점(튜플)
    • 순서 고정
    • 요소 값의 수정(삽입,삭제)이 불가능함(데이터타입)
    • count, index
    • 요소가 하나일 때 ,가 필요함
    • 더 적은 메모리를 사용하고 이터레이션이 더 빠르다(▶ 더 적은 메모리를 사용하니까 반복에도 더 빠르다고 생각하면 될듯 생성이 더 빠른 이유도 마찬가지)
      → Mutable objects have extra overhead to deal with runtime changes: 어떤 일을 처리하기 위해 들어가는 간접적인 처리 시간 및 메모리
    • List is stored in two blocks of memory (One is fixed sized-metadata(data about data) header- and the other is variable sized -data buffer- for storing data)/tuple is stored in a single block of memeory
      → 다른 코드들이 가진 포인터를 무효화하지 않으면서 데이터 버퍼가 재할당될 수 있도록 공간을 분리해놓은 것
  • 공통점
    • 시퀀스 자료형(순서 o)
    • 인덱싱, 슬라이싱, 더하기, 곱하기(반복), 길이구하기, containment, for loop, min, max, 내장합수는 count, index
  • 리스트 함수
    del 리스트 슬라이스/리스트 요소
    리스트.insert(인덱스, 값)
  • 객체: 파이썬에서 사용되는 모든 자료형
  • 런타임: 컴퓨터 언어 안에 쓰인 프로그램을 관리하기 위해, 특정한 컴파일러나 가상 머신이 사용하는 기본 코드의 라이브러리나 프로그램/ 프로그램이 실행되고 있는 동안의 동작

https://dev-jacob.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-1
https://www.educative.io/answers/tuples-vs-list-in-python

삼항 연산자

  1. 파이썬의 삼향연산자(ternary operator)에 대해 설명하세요.
    삼항연산자란 연산자에 따라 항을 분리해서 피연산자가 3개인 경우를 말한다. 일반적인 if-else문을 한줄로 짧게 사용할 수 있으며 조건식이 길어질 경우에는 가독성이 떨어져서 사용하지 않는 것이 좋다.
    다른 언어에서는 condition ? a : b 형태로 사용한다.
  • 연산자에 따라 항을 분리해서 3개가 나오면 3항 연산자(3operands)
    (참인 경우의 값) if 조건 else (거짓인 경우의 값) → 리스트 축약식에서 사용하는.. else이하가 필수 → 참인 경우의 값이 false라도 상관없음
    == 조건 and (참인 경우의 값) or (거짓인 경우의 값)

    True and x==x
    False or x==x 이므로

    참인 경우의 값이 false면 거짓인 경우의 값이 리턴됨 → old style쓰지말고 ternary operator를 쓰는 게 좋다

  • 조건식은 파이썬 연산자 중 가장 낮은 우선순위를 가진다.

  • 참/거짓의 조건에 따라 연산한다.

  • 한줄로 조건을 판별할 수 있다.

  • 리턴 값을 변수에 넣어줄 수 있다.

  • Python 2.5 부터 도입되었다.

  • statements를 사용할 수 없다.(변수값 할당, pass 등)

💥 삼항 연산자 사용법

  • (b,a)튜플의 인덱스를 프린트

    # Python program to demonstrate ternary operator
    a, b = 10, 20
    
    # Use tuple for selecting an item
    # (if_test_false,if_test_true)[test]
    # if [a<b] is true it return 1, so element with 1 index will print
    # else if [a<b] is false it return 0, so element with 0 index will print
    print( (b, a) [a < b] )
    print([a < b])

    a<b 조건식이 참이라면 (20,10)[1]==10
    a<b 조건식이 거짓이라면 (20,10)[0]==20
    *both elements of the tuple are evaluated since the program first creates the tuple and only then checks the index.

  • 딕셔너리의 인덱스는 키값

    # Use Dictionary for selecting an item
    # if [a < b] is true then value of True key will print
    # else if [a<b] is false then value of False key will print
    print({True: a, False: b} [a < b])

    a<b 조건식이 참이라면 {True: 10, False: 20} [True]==10
    a<b 조건식이 거짓이라면 {True: 10, False: 20} [False]==20

  • 람다식을 이용해서

    # lambda is more efficient than above two methods
    # because in lambda we are assure that
    # only one expression will be evaluated unlike in
    # tuple and Dictionary
    print((lambda: b, lambda: a)[a < b]())

    람다는 함수니까( )를 붙여야 실행이 됨

    • def(리터럴 표기법)로 정의하는 함수도 뒤에()가 있음
      ()가 없으면 실행이 안되고 그냥 람다 객체가 프린트됨<function <lambda> at 0x000002C0A018AEF0>

    a<b가 참이니까 (lambda:a)()
    more efficient than two above because only one expression is evaluated ❓람다도 지금 튜플에 들어있는거 아닌가 그럼 튜플.. 먼저 만드는 건.. 마찬가지.. 아님...?➡️튜플은 먼저 생성되는 게 맞고 인덱스로 선택된 lamda:a 만 계산된다는 거 같음 이게 lazy evaluation때문인건가?????????

    람다함수

    익명함수: 함수의 이름을 지정하지 않음

    • 정의와 동시에 사용할 수 있음
      (lambda x : x+1)(3)
    • 변수에 담을 수 있음(객체이기 때문)
      func = lambda x : x + 1
      사용: func(X에 들어갈 값)
    • 코드의 간결함 메모리의 절약: 재사용하지 않는 함수라면 람다로 정의해서 바로 쓰는 게 좋다
      → 객체가 만들어지는 순간 메모리에 올라가서 자원의 소모가 생기기때문

    *함수도 클래스로 생성된 객체 인스턴스
    파이썬의 모든 것은 객췌
    https://wikidocs.net/22804

sorted (정렬 대상, 정렬 기준)

target = ['cat', 'tiger', 'dog', 'snake']
print(sorted(target, key=lambda x : len(x.strip())))
  • 대상이 딕셔너리가 아니라도 정렬기준에 식이 들어갈 때 key를 사용함(다른 단어는 invalid keyword argument for sort)
  • key를 위치인자라고 함
  • key= 부분이 빠지면 람다식을 하나의 argument로 봐서 2개의 인자를 받았다고 오류남
  • 정렬 기준이 없으면 공백->알파벳 순으로 정렬됨

논리 연산자

  • True and sth -> 순서에 따라 다름 :뒷부분이 출력됨
  • 0 and True -> always 0
  • False and sth-> always False
  • True or sth -> 순서에 따라 다름
  • False or sth -> always sth
    • or은 (한개만 트루면 되니까) 뒤에껄 볼 필요가 없으니까 먼저 온 true/sth 값이 출력되고
    • and는 뒤에껄 봐야 결과가 나오니까 앞이 트루면 뒤에 값이 출력됨 (둘다 t여야 true 하나라도 f면 false)

https://www.geeksforgeeks.org/ternary-operator-in-python/

언패킹

x,y='12'
print(y,x)

iterable하면 가능하다
갯수는 맞춰줘야함 ⭐⭐⭐
짝수개면 되는 게 아니라 딱 두개여야함

profile
looooggi

0개의 댓글