파이썬 하나의 리스트 안에서 순서대로 리스트값을 선택하여 다른 리스트로 append하는 방법을 모르겠어요

조회수 698회

예를 들어 제 리스트가

list = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

라고 하면

새로운 리스트를

new_list = [[[0,1] ,[0,2], [0,3],.....,[0,15]], [[1, 2], [1, 3], [1, 4],...[1,15]], [[2, 3],....[2,15]],....[[14,15]]]

리스트안에 리스트안에 리스트를 만든다는 건데요.

[x, y]라고 하면 x가 같은 리스트 끼리는 또 다 같은 리스트에 묶이도록 하고싶어요. y는 x보다 하나 큰 거에서 마지막 값인 15까지로 설정하고 싶어요. 꼭 y값이 x보다 커야해요.

sss = [ ]

ttt = [ ]

i = 0

j = 1

while  j < len(seq_list):

    if j>i:
        x = [i,j]
        j = j+1
        sss.append(x)
    if j == len(seq_list):
        i = i+1
        print(sss)
        ttt.append(sss)
        j=i+1

이렇게 했는데 모든 집합이 다 sss리스트에 묶여요. 도움 부탁드립니다. ㅜ

3 답변

  • 이렇게 하시면 될 것 같습니다.

    L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
    
    result = []
    for i in L[:-1]:
        for i2 in range(i+1, L[-1]+1):
            result.append([i, i2])
    result = result[:-1]
    
    # result 값
    [
     [[0, 1], [0, 2], ... [0, 14], [0, 15]],
     [[1, 2], [1, 3], ... [1, 14], [1, 15]],
     ...
     [[13, 14], [13, 15]],
     [[14, 15]]
    ]
    

    아래는 간략화하여 표현한 코드입니다.

    L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
    
    result = [[[i, i2] for i2 in range(i+1, L[-1]+1)] for i in L[:-1]]
    

    도움이 되셨길 바랍니다!

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 참고하세요.

    src = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
    [[[x, y] for y in src[x+1:]] for x in src[:-1]]
    
    [[[0, 1],
      [0, 2],
      [0, 3],
      [0, 4],
      [0, 5],
      [0, 6],
      [0, 7],
      [0, 8],
      [0, 9],
      [0, 10],
      [0, 11],
      [0, 12],
      [0, 13],
      [0, 14],
      [0, 15]],
     [[1, 2],
      [1, 3],
      [1, 4],
      [1, 5],
      [1, 6],
      [1, 7],
      [1, 8],
      [1, 9],
      [1, 10],
      [1, 11],
      [1, 12],
      [1, 13],
      [1, 14],
      [1, 15]],
    ...
    ...
    [[10, 11], [10, 12], [10, 13], [10, 14], [10, 15]],
     [[11, 12], [11, 13], [11, 14], [11, 15]],
     [[12, 13], [12, 14], [12, 15]],
     [[13, 14], [13, 15]],
     [[14, 15]]]
    
    
    • 문제를 잘못봤군요-.- 정영훈 2020.2.24 13:43
  • 번외. 스칼라로 해보기

    val src = 0 to 15 
    val r = for(x <- src.slice(0, src.size - 1)) yield for(y <- src.slice(x+1, src.size)) yield (x, y)
    
    r(10).foreach(println)
    (10,11)
    (10,12)
    (10,13)
    (10,14)
    (10,15)
    
    
    r(12).foreach(println)
    (12,13)
    (12,14)
    (12,15)
    

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

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

(ಠ_ಠ)
(ಠ‿ಠ)