파이썬 리스트 인자 개수 확인하는 함수..

조회수 7769회

numbers=[1,2,3,4,5,6,1,2,3,4,5,2] 라는 리스트를 만들었고

a1=numbers.count(1)

a2=numbers.count(2)

이런식으로 a6까지를 만들고 싶은데 이걸 함수로표현하는 방법이 있을까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

3 답변

  • 그럴때 편하게 사용할 수 있는 모듈이 있습니다.

    itertools 모듈인데요.

    itertools 의 groupby 를 사용하면 편하게 할 수 있습니다.

    import itertools
    
    numbers=[1,2,3,4,5,6,1,2,3,4,5,2]
    for k, v in itertools.groupby(sorted(numbers)):
        print(list(v))
    
    [1, 1]
    [2, 2, 2]
    [3, 3]
    [4, 4]
    [5, 5]
    [6]
    
    

    groupby 의 역활은 [1,1,2,2,3,3] 이 존재할 때 11 22 33 와 같이 그룹화를 해줍니다.

    sorted 를 해서 1부터 6까지 정렬을 해서 [1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6] 와 같이 만들어주고 groupby를 하면 같은것끼리 묶입니다.

    • 오오 리스트로 그룹화해주는 코드도 있군요! 제가 우선 지금 필요한거는 인수가 리스트에 몇개가 있는지 확인하고 그거에 대한 추가적인 연산을 해야해서요 ㅎㅎ 답변감사합니다:) 알 수 없는 사용자 2017.5.22 22:07
  • 으음.. 저는 변수를 할당하는 것에 대해서 초점을 맞춰서 이야기를 할게요. 일단 변수 할당에 대해서 의논할 필요가 있는데요, 컴퓨터 프로그래밍 언어라는게 사실은 따지고 보면은 그것도 프로그램이거든요. 컴파일러로 작동하는 프로그램이다? 그렇게 할 수 없는 이유는 컴파일러의 이유이기도 하고, 프로그래밍 언어가 지향하는 바에서 벗어나는 것이기도 하기 때문이에요.

    for i in range (0,3):
        ai = i
    

    단적인 예로 위와같이 쓸게요. 우리가 직관적으로 이해하기에는 위와같이 하면

    a0 = 0
    a1 = 1
    a2 = 2
    a3 = 3
    
    

    같이 될 것 같지만, 그렇게 되지는 않아요. 왜냐하면 위와 같은 코드는 중의적이기 때문에 컴파일러가 해석하는데 문제가 있기 때문이에요. ai 라는 이름의 변수에 값을 할당하라는 것인지, a1,a2,a3 이라는 이름의 변수에 값을 할당하라는 것인지, 두개로 해석이 가능하잖아요? 아마 대개의 컴파일러 언어들은 전자로 해석할거에요. 작성자님께서, 나는 싫어! 후자로 할거야! 라고 하실수도 있겠죠. 아니면, 컴파일러한테도 이건 이렇게 해석하는 거야. 라고 알려줄 수도 있겠죠. 그런데, 굳이. 다른 방법이 있고. 그렇게해야할 필요가 없는데 꼭 그렇게 해야할까요?

    a = []
    for i in range (0,6):
        a[i] = i
    
    

    이렇게 하시는게 현명한 방법이라고 생각해요.

    • 그런데. 마크업으로
      이 줄바꿈 아닌가욧?? 왜 안돼지 ㅇㄴㅁㄴㅁㅇㅁㄴㅇ
      dbwodlf3 2017.5.24 10:05
  • #target 은 우리가 리스트 안에서 각 데이터 마다 비교해야할 대상
    #data 는 리스트
    def listCount(target, data):
        count = 0
    
        for i in range(len(data)):
            if target == data[i]: # data 리스트의 i 번째가 target(대상) 과 같다면
                count = count + 1
    
        print(count)
        return count
    
    numbers = [1, 2, 3, 4, 5, 2, 1, 1]
    
    a1 = listCount(1, numbers) # 결과는 3
    a2 = listCount(2, numbers) # 결과는 2```
    

    제가 이해한 바로는 리스트를 만들고,

    비교할 값을 정해서

    각 인덱스 마다 target (비교할 값)을 대조 해봐서

    맞다면 1 추가 하고 아니면 말고,

    그래서 결과적으로 이 리스트에 target 에 해당하는 값이 몇개나 있냐?

    이것을 물어보는 것이 맞나요?

    일단 코드를 만들었습니다.

    제가 이해한것이 잘못된 것이라면 댓글이나 다른걸로 적어주세요.

    코드는 https://github.com/proogrammer/MyAnswers/blob/master/python/listCount.py 에 있습니다.

    :)

    • 친절한 답변정말 감사해요! 그런데 저는 i값이 변함에 따라서 a(i)값이 자동으로 계산?되는 함수를 만들수 있을지 궁금했어요. 위에서는 6까지 구해야했지만 10까지 값을 구하고 추가적인 연산을 해야해서요ㅜㅜㅜ혹시 이것도 가능할까요? 알 수 없는 사용자 2017.5.22 22:03
    • a1,a2이런식으로 일일이 지정해줄 필요없이 가능한지요? 저 코드를 통해서 값을 정확하게 구할 수 있어서 우선은 저걸 사용해볼게요!ㅎㅎ 조금더 간단하게 쓸 수 있을지도 궁금해서요!! 감사합니다 ㅎㅎ 알 수 없는 사용자 2017.5.22 22:05

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

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

(ಠ_ಠ)
(ಠ‿ಠ)