파이썬 이중리스트

조회수 3475회

현재 내가 만든 소스에도 전혀 안되고 제가 오늘 하루종일 머리굴려도 나오질 않네요..

import random

table1=[[0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0]]

for i in range(0,10):
    print("\n")
    for j in range(0,10):
        a=random.randrange(1,100)
        table1[i][j]=a         
for i in range(0,10):
    print("\n")
    for j in range(0,10):
        a=random.randrange(1,100)
        table1[i][j]=a
        if i>=1 and j>=1:
            for e in range(i,-1,-1):
                for f in range(j,-1,-1):
                    if table1[i][j]==table1[e][f]:
                        a=random.randrange(1,100)
                        table1[i][j]=a
                if e>=1:
                    for u in range(9,-1,-1):
                        if table1[e-1][u]==table1[i][j]:
                            a=random.randrange(1,100)
                            table1[i][j]=a    


        print(table1[i][j],end=" ")

이렇게도 짜봤지만 이중리스트에 중복된값이 나타나네요. 이제 어떻게 해야될지 전혀 모르겠습니다.

더 쉽고 간단한방법이나 고쳐야될점 알려주셨으면 좋겠습니다!

3 답변

  • 좋아요

    0

    싫어요
    채택 취소하기
    import random
    
    numContainer = random.sample(range(100), 20)
    
    numContainer[:10]
    Out[32]: [23, 6, 26, 55, 60, 50, 85, 84, 0, 58]
    
    numContainer[10:]
    Out[33]: [7, 77, 81, 11, 35, 98, 62, 80, 71, 15]
    

    위와같이 20개의 숫자를 만들고 10개씩 잘라 쓰는 형태로 하라는 의미입니다.

    질문의 소스에서는 100개의 숫자가 필요한 모양이네요.

    그러면

    random.sample(range(100), 100)
    

    같이 한번에 100개를 만들고 잘라서 사용하라는 의미입니다.

    • 아.. 이제야 이해가 됬습니다 감사합니다! 지훈 2017.4.29 00:58
    • 정말로 감사합니다! ㅠ 지훈 2017.4.29 01:02
  • random 을 매번 사용하는 것이 아니라 한번의 사용으로 필요한 만큼 숫자를 만드세요.

    import random
    
    random.sample(range(100), 10)
    

    위와같이 하면 1~100까지 수중 10개의 중복되지 않은 숫자를 리스트로 리턴합니다.

    그렇게 얻은 리스트에서 하나씩 숫자를 꺼내서 사용하면 됩니다.

    • b=random.sample(range(100),100) for i in range(0,10): print("\n") for j in range(0,10): a=random.randrange(1,100) table1[i][j]=a for e in range(0,99): if table1[i][j]==b[e]: b.remove(b[e]) b.insert(e,0) else: a=random.randrange(1,100) print(table1[i][j],end=" ") 지훈 2017.4.28 23:19
  • b=random.sample(range(100),100)
    for i in range(0,10): print("\n") for j in range(0,10): a=random.randrange(1,100) table1[i][j]=a for e in range(0,99): if table1[i][j]==b[e]: b.remove(b[e]) b.insert(e,0) else: a=random.randrange(1,100) print(table1[i][j],end=" ")

    이렇게 짜봐도 중복된수가 뜨네요...

    • 그게 아니라 random 은 한번만 하는 겁니다 한번할 때 필요한 수를 다 만들고 사용합니다. random은 호출시마다 중복될 수 있으므로 한번 random.sample 시에 필요한 갯수 만큼 한번에 다 만들고 그렇게 만든 리스트에서 필요한 만큼 슬라이스하여 사용하면 됩니다. 정영훈 2017.4.29 00:42

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

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

(ಠ_ಠ)
(ಠ‿ಠ)