상세 컨텐츠

본문 제목

[PYTHON] list()와 [], sort()와 sorted, reverse

Python

by ollive 2024. 7. 17. 22:10

본문

20. 정수 내림차순으로 배치하기 : list(), 매서드

20 - 풀이 1) 매서드사용

  • list 매서드 sort는 해당 list 내 데이터 타입이 같은 자료만 있을 때 사용 가능하다.
  • 또한 매서드는 함수에 담을 수 없다. 따라서 값이 수정되면 그때마다 원본리스트가 바뀐다.
def solution(n):
    answer = []
    # 숫자 n을 문자형으로 바꿔주면 i에 자릿수를 하나씩 넣을 수 있음
    for i in str(n):
        #각 자리값을 리스트에 추가하고 역순으로 정렬함
        #.sort()와 .reverse()는 .sort(reverse = True)로 사용이 가능함
        answer.append(i)
        answer.sort()
        answer.reverse()
        #조인으로 각각의 숫자를 합쳐주고 숫자형으로 다시 변환시킴
    return int("".join(answer))

 

20 - 풀이 2) list() 와 [ ] 결과 비교

# 풀이 2
def solution(n):
    # n을 문자형으로 바꾸고 list 구조로 저장함 ['1', '1', '8', '3', '7', '2']
    answer = list(str(n))
    answer.sort(reverse = True)
    return int("".join(answer))
  • 풀이 2에서 주의해야 할 점은 리스트를 어떻게 사용하는지에 따라 결과값이 달라진다는 점이다.
    • 빈 리스트를 선언할 때는 a = list() 와 a = [ ]가 같은 결과를 가져온다. 하지만 결과값을 가져오는 속도부분에서 [ ]을 사용하는 것이 효과적이다.
    • 리스트 선언이 아닌 값이 있는 변수를 바꾸는 것이라면 결과가 달라진다.
    • list(변수)변수의 값을 리스트로 바꾸는 것과 같다. for문과 같은 결과가 나오며, 한가지 요소에만 사용가능하다.
    • [변수]는 변수의 타입은  그대로 두고 리스트로 감싸는 것과 같다. 
  • 출력값 비교
def solution(n):                  #입력 : solution(118372)
    answer1 = n                   #출력 : 118372
    answer2 = [(n)]               #출력 : [118372] 
    answer3 = [str(n)]            #출력 : ['118372']
    answer = list(str(n))         #출력 : ['1', '1', '8', '3', '7', '2']
def solution(n,m):                         # 입력 : solution(136373,284)
    answer1 = n,m                          # 출력 : (136373, 284)
    answer2 = [(n,m)]                      # 출력 : [(136373, 284)]
    answer3 = [str(n),str(m)]              # 출력 : ['136373', '284']
    answer = list(str(n))+list(str(m))     # 출력 : ['1', '3', '6', '3', '7', '3', '2', '8', '4']

참고: https://conansjh20.tistory.com/79

20 - 풀이 3) 리스트.sort() 와 sorted(리스트), reverse

#풀이3
def solution(n):
    return int("".join(sorted(list(str(n)), reverse=True)))
    
    
    print(sorted(list(str(n))))               # 출력 : ['1', '3', '3', '3', '4', '6', '7']
    print(sorted(list(str(n)), reverse=True)) # 출력 : ['7', '6', '4', '3', '3', '3', '1']

 

  • 리스트.sort()는 리스트의 매소드로 리스트 원본을 수정하며 함수에 담을 수 없다.
  • sorted(리스트)내장 함수이며, 원본은 그대로이며 정렬된 결과를 반환한다.
  • 리스트.reverse()리스트의 매소드리스트 원본을 수정하며 함수에 담을 수 없다. 또한 원본에서 역순으로만 뒤집힐 뿐 정렬되진 않는다.
  • 스트.sort(reverse = True)를 사용하면 정렬하여 뒤집혀 역순으로 정렬된 결과를 얻을 수 있다.
  • sorted(리스트, reverse=True) 내장 함수이며, 역순으로 정렬된 결과를 반환한다.
  • reversed(sorted(리스트))를 사용해도 역순으로 정렬된 결과를 얻을 수 있다.

 


21. 하샤드 수 

21 - 풀이 1)

def solution(x):
    answer = True
    sum_x = 0
    for i in str(x):
        sum_x += int(i)
        if x % sum_x == 0:         
            answer = True
        else:
            answer = False
    return answer

 

21 - 풀이 2) list comprehension, bool

def solution(n):
    return n % sum(int(x) for x in str(n)) == 0
  1. int(x) for x in str(n) : 리스트 컴프리헨션으로, 문자n을 x에 하나씩 넣어 나온 결과를 int()로 씌워서 숫자로 취한다.
  2. sum( 1.결과 ) : int(x)를 더한다
  3. n % 2.결과 : n을 sum(int(x))의 값으로 나누어 나머지를 본다
  4. return 3.결과 == 0 : 나머지가 0 인지 확인하여 0과 같으면 True, 아니면  False를 반환한다
def solution(n):
    return not( n % sum([int(x) for x in str(n)]) )

위와 같은 식이지만 not()으로 식을 묶음으로써 ==0을 제외하였다. 

bool논리 인해 0 이 나오면 False를 숫자가 나오면 True를 반환하겠지만, not을 사용하여 결과를 반대로 반환된다.

 

21 - 풀이 3) map

def solution(x):
    answer = True
    sum_x = sum(map(int,str(x)))
    if x % sum_x:
        answer = False
    return answer

 

map object는 이미 iterable 하기 때문에 list 함수를 사용 안해도 sum값을 구할 수 있다.


22. 콜라츠 추측 :

22 - 풀이 1) 

def solution(num):
    n = 0
    if num == 1 : 
        n = 0
    else:
        while num > 1 :
            if num % 2 == 0:
                num = num // 2
            else:
                num = num *3 +1
            n += 1 
            if n == 500:
              n = -1
              break
            
    return n

 

'Python' 카테고리의 다른 글

[PYTHON] zip  (1) 2024.07.23
[python] 문자열 뒤집기  (0) 2024.07.20
[PYTHON] Boolean 자료형 정리  (0) 2024.07.17
[PYTHON] map, iterable  (0) 2024.07.17
python (기초) 연산  (0) 2024.07.12

관련글 더보기