파이썬의 list와 관련한 유용한 도구들을 보자!
이때까지 배운걸로 정사각형 넓이를 구해보자
areas = []
for i in range(1,11):
areas = areas + [i*i]#extend나 append를 써도 될듯
print(areas)
#output - > [1,4,9,16,25,36,49,64,81,100]
이것보다 간단하게 만들어보자
areas2 = [i*i for i in range(1,11)]
print(areas2)
#output - > [1,4,9,16,25,36,49,64,81,100]
for문을 돌며 i를 가져오고 계산할 식을 i*i 에 넣는 것임.
이렇게 list의 사용법을 이용하여 코드수를 줄이는 기법을 list comprehension이라고 한다.
특정조건이 필요하다면 어떻게 해야할까
길이가 짝수인 정사각형의 넓이만 구할때를 보자
areas = []
for i in range(1,11):
if i%2 == 0:
areas = areas + [i*i]#extend나 append를 써도 될듯
print(areas)
#output - > [4,16,36,64,100]
더 간단하게 해보자 list comprehension
areas= [i*i for i in range(1,11) if i%2 == 0]
print(areas)
#output - > [4,16,36,64,100]
또 다른 기능은 for 문을 중첩하여 바둑판을 만들 수 있다.
[(x,y) for x in range(15) for y in range(15)]
#output
(0,0)~(0,14)
(1,1)~(1,14)
...
(14,1)~(14,14)
예제를 보자
list1 = [i for i in range(1,101) if i%8==0)
print(list1)
list컴프리헨션과 비교했을때 괄호모양과 순서등을 유의하며 보자
students = ["호날두","메시","박지성","손흥민","차범근"]
for number, name in enumerate(students):
print("{}번의 이름은 {}입니다.".format(number,name))
#output
0번의 이름은 호날두입니다.
...
4번의 이름은 차범근입니다.
enumerate를 이용해보자
students_dict = {"{}번".format(number+1):name for number, name in enumerate(students))
#output
{'1번':'호날두','5번':'차범근','4번':'손흥민','3번':'박지성','2번':'메시'}
넘버와 네임을 Enumerate에서 가져와서 key는 format이 달린 형태를 만들어주고 이름을 값으로 넣어줌.
(뭔소리지)
두개이상의 list나 string을 받아들여 Index에 맞게 for in 문에서 하나씩 던저줄 수 있게 만드는 역할을 한다.
scores = [85,92,78,90,100]
students = ["호날두","메시","박지성","손흥민","차범근"]
for x, y in zip(students, scores):
print(x,y)
#output
호날두 85
메시 92
박지성 78
손흥민 90
차범근 100
for문으로 zip을 활용해서 Print하는 부분을 dictionary comprehension으로 만들어보자
score_dic = {students : score for student, socre in zip(students, socores))
print(score_dic)
#output
{'차범근' : 100, '메시': 92, '호날두' : 85, '박지성' : 78, '손흥민' : 90 }