728x90

이번 시간에는 List 의 Element 들을 자유자재로 정렬하는 법을 알아보겠습니다.

지난 시간에 List a 의 멤버함수 sort() 를 이용하여 잠깐 list 를 sorting 했었는데, 오늘은 sorted 라는 내장함수를 이용해 보겠습니다.
두 방법 간의 차이는 간단합니다.  a.sort()와 같이 객체의 함수를 이용하면 List 자체가 변경되는 것이고, sorted  를 이용하면 원래 list 객체의 데이터들은 변함없이 정렬된 결과만 별도로 리턴하는 것입니다.

자. 아래 시험을 쭈욱 쫓아가보면 이해가 될 것입니다.
사용자 정의함수를 이용한 정렬이나 join, split 을 이용한 List <-> string 간 변환 등 고급스런 활용법도 나오니 유심히 잘 보시기 바랍니다.

>>> a = [4,2,1,6]
>>> sorted(a)                            # List a 를 이용하여 sort 된 새 list 를 만듬
[1, 2, 4, 6]
>>> a = [1,2,3,'aa']                    # 문자, 숫자 조합 List
>>> sorted(a,reverse=True)         # List a 를 이용하여 revere 된 새 list 를 만듬
['aa', 3, 2, 1]
>>> a = ['ccc', 'aaaa', 'd', 'bb']  # 문자 List
>>> sorted(a)                            # 순방향 정렬
['aaaa', 'bb', 'ccc', 'd']
>>> b = sorted(a)                       # 정렬 결과를 b 도 가리키게 함.
>>> b
['aaaa', 'bb', 'ccc', 'd']
>>> a
['ccc', 'aaaa', 'd', 'bb']
>>> len
<built-in function len>
>>> sorted(a,key=len)                 # help(sorted)를 보면 sorted 함수 사용법 나옴.
['d', 'bb', 'ccc', 'aaaa']              # 정렬비교를 할 때 key 를 문자열 len 결과로 정렬
                                                # 각 element 의 len 을 구하여 그 결과로 정렬
>>> a[1] = 'aaaz'                      # 두번째 element 값을 변경
>>> def last(s): return s[-1]        # last 라는 함수 정의 (받는 문자열의 마지막 문자를 리턴)
... 
>>> last                                    # 함수포인터 주소가 나오면 함수정의가 된 것임.
<function last at 0x291ce60>
>>> sorted(a,key=last)                # 사용자가 정의한 last 함수를 정렬비교의 key 로 활용
['bb', 'ccc', 'd', 'aaaz']
>>> 

>>> a
['ccc', 'aaaz', 'd', 'bb']
>>> ':'.join(a)                            # List a 의 각 요소들을 ':' 로 모두 합침
'ccc:aaaz:d:bb'
>>> '\n'.join(a)                        # List a 의 각 요소들을 new line 으로 합침
'ccc\naaaz\nd\nbb'
>>> b = ':'.join(a)                       # ':' 로 합친 string 결과를 b 에 할당
>>> b.split(':');                          # b string 을 다시 ':' 로 split 하면 List 가 됨.
['ccc', 'aaaz', 'd', 'bb']
>>> b
'ccc:aaaz:d:bb'

우리가 프로그래밍하다 보면 일정한 범위 내에서 loop 를 돌리기 위해 for 구문을 많이 사용하는데요.
아래에 좋은 사용예들이 있습니다.
for 구문은 다음과 같이 사용해야 한다는 것을 유념하세요.  loop 범위에 해당하는 부분은 반드시 List 형이 사용되어야 한다는 것을 명심해야 합니다.

   for 변수 in List:
      do something

>>> a
['ccc', 'aaaz', 'd', 'bb']
>>> result = []
>>> for s in a: result.append(s)    # a list 를 result list 에 element 하나하나 copy 하고 싶을때
... 
>>> result
['ccc', 'aaaz', 'd', 'bb']
>>> range(10)                            # for 등의 loop 구문을 사용할 때 range 로 많이 사용
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]            range 의 결과는 결국 숫자 list 인 것을 알 수 있음
>>> for i in range(20): print i        # for 구문의 범위를 지정할 때는 range(20)과 같이 list 로 지정
... 
0
1
2
3
4
5
6
7
8
9
>>> a
['aa', 'cc', 'bb', 'dd']
>>> for i in len(a): print a[i]         # 이게 왜 에러가 날까?
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable   # len(a) 는 list 가 아니기 때문이다. !!!

>>> for i in [1,2,3]: print i             # loop 범위를 나타내기 위해 직접 List 를 넣어도 된다.
... 
1
2
3

 

출처 : http://cloudrain21.tistory.com/entry/파이썬python-리스트-정렬-List-Sorting

728x90

'Python' 카테고리의 다른 글

python dictionary  (0) 2014.05.02
python tuple  (0) 2014.05.02
python list2  (0) 2014.05.02
python list  (0) 2014.05.02
python string  (0) 2014.05.02

+ Recent posts