파이썬: 동적 변수로 리스트 만들기 궁금증.

조회수 2220회

안녕하세요. 코린이 입니다.

하나를 구현해보고 싶은데 잘 되지 않네요..

구현하고자 하는 것은

  • 가령 listA라는 리스트가 있으면 이걸 n으로 나누어서 리스트를 쪼갭니다. (본문에서는 5로 나누어서 3개의 리스트로 쪼갬)
  • 그리고 쪼개진 리스트는 각각 listA-1, listA-2, listA-3이라는 이름을 가지고,
  • 각 각의 이름 변수는 쪼개진 리스트 listA[0], listA[1], listA[2]에 Binding 합니다.

즉, 임의의 리스트를 입력한 수로 쪼개고, 쪼개진 수에 맞게 자동으로 생성된 이름을 쪼개진 리스트들과 각각 바인딩 하는게 만들고자 하는 최종 목적입니다.

이모저모 찾아봐서 1) 리스트를 쪼개기. 2) 입력한 수에 맞도록 쪼개진 리스트 수에 맞게 자동으로 이름 만들기는 됩니다만,

3) 이름 변수와 쪼개진 리스트 바인딩을 못 하겠습니다.

코딩을 취미삼아 공부해보고자 하는데, 너무 어렵네요.

(제가 작성한 질문 제목이 적합한지도 모르겠습니다.)

고수분들의 조언 감사드립니다.

listA = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

n = 4

results = [listA[i*n:(i+1)*n] for i in range((len(listA) -1 + n) // n)]

def setName():

    names = []

    for i in range(len(results)):
        names.append("listA-" + str(i + 1))
    print(names)

#아래 부분에서 막힘.
    for name in names:
        globals()[name]  = results[]

#아래는 정상 작동함.
    for name in names:
        print(name, "=", globals()[name])

setName()
  • 이런 작업이 왜 필요한 건가요? 변수를 동적으로 생성하면 다시 쓸 때에도 복잡하고, 일반적인 파이썬 입문서에는 이런 걸 가르쳐주는 걸 못 봤는데... 그냥 어떤 글로벌 딕셔너리에 key, value 로 저장하는 게 훨씬 간단해요. 도대체 왜 필요한거에요? nowp 2021.2.23 08:40
  • 안녕하세요. 답변 감사드립니다. 대략 1000여개로 이루어진 리스트 A, B, C가 있습니다. 각 리스트를 메소드에 넣고 검사하고자 하는데, 리스트 내부의 값이 400개 정도로 쪼개줘야지 작동해서, 각 리스트를 나누어 줘야 합니다. 여기까지라면, 단순히 1000여개를 /400으로 해서 수동으로 리스트를 만들어 주면 좋은데......각 리스트는 자동으로 수량이 몇 개씩 증가할 수 있고, 저는 그 증가 여부를 모르는 상황입니다. 매일매일 리스트를 확인할 수 없어서, 자동으로 이 것들을 400개로 나누어 쪼개고, 각 리스트를 A-1, A-2, ....A-n/ B-1, B-2,....B-n/C-1, C-2....C-n라는 이름을 자동으로 설정하고, 각 이름변수는 자동으로 쪼개어 생성된 리스트의 리스트원소 [0], [1], [2]...(각 원소도 리스트)에 바인딩 시키고 싶어서 입니다. 제가 생각하는 것이 많이 어렵나요? 제가 코딩 초보라서 이것이 가능한지 불가능한지도 잘 모르는 상황이기는 합니다 ^^;;; 알 수 없는 사용자 2021.2.23 08:59

1 답변

  • A 라는 리스트를 쪼개서, 작은 리스트로 A_1, A_2, A_3 이렇게 만들겠다는 거죠? 굳이 A_1 같은 이름을 만들 필요가 없어요. 그냥 리스트의 리스트로 만들어서, A_lists[0], A_lists[1], ... 이렇게 하면 됩니다.

    아래 예를 들어보겠습니다.

    >>> l = list(range(50))
    >>> n = 15
    >>> lists = [ l[i*n:(i+1)*n] for i in range((len(l) + n -1) // n) ]
    >>> lists
    [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], [45, 46, 47, 48, 49]]
    >>> lists[0]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
    >>> lists[1]
    [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
    >>> def process_list(l_15):
        s = sum(l_15)
        return s
    
    >>> for i, list_i in enumerate(lists):
        print(i, process_list(list_i))
    
    
    0 105
    1 330
    2 555
    3 235
    

    50개 짜리 리스트를 쪼개서, lists 라는 변수에 담고, 쪼개진 하나하나의 리스트를 접근한 때에는 lists[0], lists[1], ... 이렇게 접근하여 사용합니다.

    OK?

    • 감사합니다. 도움주신 코드로 연습해 보겠습니다. ^^ 코딩이 재미난데 참 어렵네요. 그리고.. 제가 이 곳을 처음 써보는데.. 제가 작성할때의 글과 질문에 등록된 글의 형식이 조금 다른 것 같은데.. 자동으로 수정된 건가요?? 아니면 누군가가 편집해 주신거에요?? 알 수 없는 사용자 2021.2.23 10:25
    • 해시코드는 권한 있는 사람이 질문글을 "수정"(주로 마크다운 적용 개선)하는 게 가능합니다. 작성자/수정자 표시 옆에 ">" 버튼이 있으면 수정된 적이 있는 겁니다. https://hashcode.co.kr/question/12711/history 엽토군 2021.2.23 11:52

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

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)