설치 1강 2강 3강 4강 5강 6강 7강

6강

Iterable Object (순회가능한 객체)

  • 순회가 가능한 객체를 뜻한다.?
  • set,list,dict,tuple,string,range 등
  • 보통 (for 변수 in 순회가능한 객체) 로 사용한다.
In [3]:
for wo in "hello world":
    print(wo)
h
e
l
l
o
 
w
o
r
l
d
In [5]:
for wo in "hello world":
    print(wo,end=".")
h.e.l.l.o. .w.o.r.l.d.
In [6]:
for i in [1,2,3]:
    print(i)
1
2
3
In [7]:
mydic={'a':1,'b':2,'c':2}
In [9]:
for key in mydic:
    print(key)
a
b
c
In [11]:
for key in mydic.keys():
    print(key)
a
b
c
In [12]:
for value in mydic.values():
    print(value)
1
2
2
In [14]:
for key,value in mydic.items():
    print(key,value)
a 1
b 2
c 2
In [15]:
for i in range(1,5):
    print(i,end=",")
1,2,3,4,

빌트인 함수

sorted

  • 정렬된 리스트를 반환한다.
  • sorted(iterable, key= 함수, reverse =True 또는 False)
  • 위의 문법에서 iterable 의 원소하나를 함수에 넣었을 때의 반환값을 기준으로 원래 리스트를 정렬한다.

Q . [13,26,31,49,55] 라는 리스트를 일의자리가 큰 순서대로 정렬해보자.

In [16]:
def sort_fn(value):
    """일의 자리를 반환하는 함수"""
    return value % 10
In [17]:
sort_fn(15)
Out[17]:
5
In [18]:
list1=[13,26,31,49,55]
In [19]:
sorted_list=sorted(list1,key=sort_fn,reverse=True)
In [20]:
sorted_list
Out[20]:
[49, 26, 55, 13, 31]
In [21]:
#### 위와 같은 표현, 람다함수 사용
sorted_list2=sorted(list1,key=lambda value : value % 10, reverse=True)
In [22]:
sorted_list2
Out[22]:
[49, 26, 55, 13, 31]

(참고-비교) list의 멤버함수로서 sort

  • 위의 예에서 보듯 sorted는 리스트를 적당한 기준(함수)으로 새로운 리스트를 리턴하는 일종의 함수이다.
  • 한편 sort는 아래예에서 보듯 리스트의 멤버함수로 작용한다.
  • 이때 sort는 리스트 원본 자체의 순서를 변경하며 리턴값이 없다.
In [26]:
mylist2=[1,2,3,4,5]
sorted_mylist2=sorted(mylist2,key=None,reverse=True)
In [27]:
mylist2
Out[27]:
[1, 2, 3, 4, 5]
In [28]:
sorted_mylist2
Out[28]:
[5, 4, 3, 2, 1]
In [29]:
mylist2.sort(key=None, reverse=True)
In [30]:
mylist2
Out[30]:
[5, 4, 3, 2, 1]

여러가지 기준으로 정렬해보기

In [31]:
mytest=[5,-6,6,-4,9,-2,0,10]

1. 절댓값이 큰것부터 작은차례로 정렬한 test1 만들기

  • 원본은 유지하고 새로운 리스트 test1 만들기
  • sorted 함수를 사용
In [37]:
test1=sorted(mytest,key=lambda i : abs(i),reverse=True)
In [38]:
test1
Out[38]:
[10, 9, -6, 6, 5, -4, -2, 0]

2. 수 4로 나눈 나머지 값을 기준으로 작은 것부터 큰것으로 정렬한 test2 만들기

  • 원본은 유지
In [39]:
test2= sorted(mytest,key=lambda i : i%4)
In [40]:
test2
Out[40]:
[-4, 0, 5, 9, -6, 6, -2, 10]

3. 수 3으로 나눈 나머지 값을 기준으로 큰것부터 작은것으로 정렬하도록 원본 mytest 변경

  • sort 함수 사용
In [41]:
mytest.sort(key=lambda i :i%3 ,reverse=True)
In [42]:
mytest
Out[42]:
[5, -4, -2, 10, -6, 6, 9, 0]

문자의 대소비교

In [44]:
'a'<'b'
Out[44]:
True
In [45]:
'f'<'d'
Out[45]:
False
In [46]:
ord('a')
Out[46]:
97
In [47]:
ord('b')
Out[47]:
98
In [50]:
ord('0')
Out[50]:
48
In [51]:
ord('A')
Out[51]:
65
In [53]:
'C'<'a'
Out[53]:
True

과제)

  • mylist의 변수에 리스트가 할당되어 있습니다.
  • 자릿수 기준으로 작은 것부터 큰것으로 정렬해봅시다. (예 11의 자릿수는 2, 132의 자릿수는 3, 1111의 자릿수는 4)
  • 정렬한 결과를 result에 담아봅시다.
In [54]:
mylist=[10,15,6,541,12478,1245]
In [ ]:
 

과제2)

  • mylist2의 변수에 리스트가 할당되어 있습니다.
  • 다음 두가지 기준을 차례로 적용하여 정렬해봅시다.(즉, 1차기준이 동일하면 2차기준적용)
    • 1차기준:자릿수 기준으로 작은 것부터 큰것으로 정렬해봅시다. (예 11의 자릿수는 2, 132의 자릿수는 3, 1111의 자릿수는 4)
    • 2차기준:1의 자리 숫자를 큰것부터 작은것으로 정렬해봅시다.
  • 정렬한 결과를 result2에 담아봅시다.
In [55]:
mylist2=[10,15,6,7,31,541,2547,1245,333]

힌트

In [56]:
str(12)
Out[56]:
'12'
In [57]:
len("456")
Out[57]:
3

[참고] map

  • 함수와 순회가능한 객체를 변수로 하고, iterator를 반환함.
  • iterator 는 일단 적당한 가공에 의해 iterable하게 바꿀 수 있는 것이라고만 생각하면 됨.
  • map (함수, 순회가능한 객체)

예제) [1,2,3,4,5]를 모두 제곱한 값을 가지는 리스트를 만들어보세요.

In [58]:
exlist=[1,2,3,4,5]
In [59]:
## 첫번째 방법
result=[]
for i in exlist:
    result.append(i**2)
print(result)
[1, 4, 9, 16, 25]
In [60]:
# 두번째방법
def power_fn(value):
    return value**2
In [61]:
power_fn(5)
Out[61]:
25
In [68]:
iterator= map(power_fn,exlist)
In [69]:
iterator
Out[69]:
<map at 0x327bd10>
In [70]:
result2=list(iterator)
In [71]:
result2
Out[71]:
[1, 4, 9, 16, 25]
In [72]:
#세번째 방법 -리스트컴프리헨션
result3=[i**2 for i in exlist]
In [73]:
result3
Out[73]:
[1, 4, 9, 16, 25]

List comprehension

  1. [표현식 for 항목 in 반복가능객체 ]
  2. [표현식 for 항목 in 반복가능객체 if 조건]
In [1]:
# 1부터 10까지 거듭제곱의 리스트
[i**2 for i in range(1,11)]
Out[1]:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
In [2]:
# 홀수 10개를 포함하는 리스트
[2*i+1 for i in range(10)]
Out[2]:
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
In [1]:
# 짝수의 제곱만 포함하는 리스트
[i**2 for i in range(1,11) if i%2==0 ] # for 를 돌면서 if가 참이 되는 경우에만 출력
Out[1]:
[4, 16, 36, 64, 100]

Dict comprehension

In [2]:
example =[('a',1),('b',2),('c',3)]

순서쌍의 첫번째 원소를 key, 두번째 원소를 value로 하는 사전을 만들어봅시다.

In [4]:
{v:k for k,v in example}
Out[4]:
{1: 'a', 2: 'b', 3: 'c'}

set comprehension

In [5]:
{x**2 for x in [-1,1,2,3]}
Out[5]:
{1, 4, 9}

중복이 제거됨!

In [ ]:
 

blog comments powered by Disqus