만약 우리가 어떤 사람들을 특정 랭크와 번호에 따라 분류시키고 싶다면 그리고 그러한 것들에 대해서 각 원소들이 의미하는 것이 무엇인지 나태내고 싶다면 어떻게할까??
이럴때 쓰는 것이 for문, range, namedtuple이다.
이러한 목표를 실행하기 위해서는 2가지 방법이 있는데 우선 첫 번째 방법부터 살펴보자.
1번 방법
student_num = [str(i) for i in range(1,21)]
rank = 'A B C D'.split()
# 여기서 알아야 하는 점은 split()함수는 해당 원소들을 새로운 리스트에 담는다.
Sort_func = namedtuple('sort', 'rank, num')
Sort1 = [sort('rank', 'num') for i in rank ,for k in student_num]
위처럼 반드시 리스트로 묶고 for문을 돌려줘야한다
만일 아래의 경우처럼 하면 오류가 발생한다.
Sort1 = [sort('rank', 'num')]
for i in rank :
for k in student_num :
rank = i
num = k
이런 식의 코드는 에러가 난다. 그리고 제대로 된 결과를 찍어보면 아래와 같다.
[Classes(rank='A', number='1'), Classes(rank='A', number='2'), Classes(rank='A', number='3')]
2번 방법
위와 같이
변수명 = [네임드튜플명(인자1, 인자2) for1 for2]
이러한 형식으로 줄지어 작성하면 코드 가독성에 있어 문제가 생길 수 있다.
그리고 rank , student_num처럼 변수들을 만들고 namedtuple을 사용하면
코드의 길이가 길어지는 단점도 존재한다.
그래서 다음과 같은 방법을 사용하는 것도 추천된다.
Sort1 = [sort('rank','num')
for rank in 'A B C D'.split()
for num in [str(n) for n in range(1,21)]