파이썬 질문합니다.

조회수 49회

리스트에 값이 여러개 있는데요 이 값들끼리 비교해서 전의 값이 후에 값보다 작으면 그대로 진행, 전의 값이 후의 값보다 크면 후의 값에 12를 더하는 방식을 어떻게 하는지 질문드립니다.

예를 들어 리스트 a 안에 ['14', '2', '3', '3', '5', '17'] 이러한 요소가 있다면 이 요소를 ['14', '14', '15','15','17','17']이런 식으로 바꾸고싶습니다.

  • 문제가 잘 이해 안 되는데요 예를 들어, [1,4,9,1,3] 이라고 할 때, [1,4,9,13,15] 이렇게 나오는 것인 가요? 아니면 [1,4,9,13,3] 이렇게 나오는 건가요? (두 번째는 12를 더하는 연산을 index 3의 값에 했지만 index 4 와의 비교는 원래의 값과 비교를 했습니다. 12를 더하고 그 더한 값으로 비교를 해야 하는지 아닌지를 모르겠습니다.) Dibrary 2020.5.20 16:42
  • 질문을 이상하게 해서 죄송합니다 [1,4,9,13,15]이러한 방식이 맞고, 같다면 변화없이 진행합니다. 21ejf 2020.5.20 16:48
  • 반복문을 통해 진행해서 리스트값을 찾아내고 싶습니다. 21ejf 2020.5.20 16:48
  • 예를 들어 리스트 a 안에 ['14', '2', '3', '3', '5', '17'] 이러한 요소가 있다면 이 요소를 ['14', '14', '15','15','17','17']이런 식으로 바꾸고싶습니다. 21ejf 2020.5.20 16:51
  • for문으로 리스트 요소를 순회할 줄만 안다면 쉽게 풀리는 문제입니다. 일단 해 보시고 안 되는 부분을 질문해 주세요. digda 2020.5.20 17:44

1 답변

  • 예시로 들어주신 List안에 숫자가 들어있나요? 문자가 들어있나요? 우선 질문과 댓글에는 문자열로 표현하셔서, 문자열 리스트를 반환하는 코드를 짰습니다.

    배열안에 숫자만 들어있다면, int()나 str()코드와 같이 형 전환 함수는 전부 지우시면 됩니다.

    그리고 '전의 값이 후에 값보다 작으면 그대로 진행' 이라고 하셨는데, 12를 더한 후의 값보다 작으면인지, 원래 배열의 값보다 작으면인지 명확히 이해가 되지 않았습니다. 우선 질문이 기대한대로 ("이 요소를 ['14', '14', '15','15','17','17']이런 식으로 바꾸고싶습니다") 결과값을 반환하도록 짰습니다.

    이 결과값 대로면 '12를 더한 후의 값보다 작으면' 로직이 됩니다.

    # 탐색해야할 배열
    target = ['14', '2', '3', '3', '5', '17']
    print("=== 변환전 ===")
    print(target)
    # ['14', '2', '3', '3', '5', '17']
    
    # target 배열 안에 있는 숫자는 0 이상 이라고 가정
    # 리스트 안에는 최소 1개 이상의 값이 있다고 가정
    # 지난 값 중 가장 큰 값을 임시 저장하는 변수
    tempMax = int(target[0])
    
    for index, value in enumerate(target):
        intValue = int(value)
        if intValue < tempMax:
            newValue = intValue + 12
            target[index] = str(newValue)
            tempMax = newValue
    
    print("=== 변환후 ===")
    print(target)
    # ['14', '14', '15', '15', '17', '17']
    

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.