[파이썬3.0] 데이터 정렬 2

프로그램 언어/파이썬|2014. 6. 24. 22:42
데이터 정렬 2

 


기록 순위를 메겨보자.
데이터 정렬에서는 정렬작업만 했는데, 이번에는 정렬을 했으니 중복된 데이터는 제거하고 필요한 만큼의 범위만 뽑아내는 것을 해보자. 


 


생각하기.
먼저 전에 했던 데이터는
>>>
['2.01', '2.01', '2.22', '2.34', '2.34', '2.45', '3.01', '3.10', '3.21']
['2.11', '2.11', '2.23', '2.23', '2.59', '3.10', '3.10', '3.21', '3.21']
['2.22', '2.38', '2.49', '3.01', '3.01', '3.02', '3.02', '3.02', '3.22']
['2.18', '2.25', '2.39', '2.54', '2.55', '2.55', '2.55', '2.58', '2.58']

이러한 형태로 출력이 되었다.
  1. 2.01이 두번 나오는 것처럼 중복된 값들이 있다.
  2. 또한 상위 기록 3개만 뽑으려면 3개의 값만을 추려내야 한다.

이 두 가지를 해결해야 rank되어 순위가 나올 것이다.
  1. 중복을 제거하는 방법은 not in 을 이용
  2. 리스트에서 필요한 부분만 뽑아내는 방법은 리스트의 특징인 리스트 슬라이스를 이용하자.

아래 코드는 그 작업을 한 코드이다.

ex_sorted_ranked3.py

def 동일화(time_string):
    if '-' in time_string:
        splitter='-'
    elif ':' in time_string:
        splitter=':'
    else:
        return(time_string)

    (mins,secs) = time_string.split(splitter)
    return(mins+'.'+secs)

with open('james.txt') as 제임스파일:
    data=제임스파일.readline()
제임스 = data.strip().split(',')

with open('julie.txt') as 줄리파일:
    data=줄리파일.readline()
줄리 = data.strip().split(',')

with open('mikey.txt') as 미키파일:
    data=미키파일.readline()
미키 = data.strip().split(',')

with open('sarah.txt') as 사라파일:
    data=사라파일.readline()
사라 = data.strip().split(',')

done_제임스=sorted([동일화(each_t) for each_t in 제임스]) # 지능형 리스트 사용.
done_줄리=sorted([동일화(each_t) for each_t in 줄리])
done_미키=sorted([동일화(each_t) for each_t in 미키])
done_사라=sorted([동일화(each_t) for each_t in 사라])

u_제임스 = []
for each_t in done_제임스:     #지능형 리스트를 사용하기에는 조건이 많이 있으므로 리스트 나열 이용
    if each_t not in u_제임스:#not in 으로 새로 담는 리스트에 값이 있으면 수행하지 않게 한다.
        u_제임스.append(each_t)#새로운 값이면 리스트에 담는다.


u_줄리 = []
for each_t in done_줄리:
    if each_t not in u_줄리:
        u_줄리.append(each_t)

u_미키 = []
for each_t in done_미키:
    if each_t not in u_미키:
        u_미키.append(each_t)

u_사라 = []
for each_t in done_사라:
    if each_t not in u_사라:
        u_사라.append(each_t)

print(u_제임스[0:3])#리스트 슬라이스를 이용해서 맨 처음 부터 3개를 골라서 출력한다.
print(u_줄리[0:3])
print(u_미키[0:3])
print(u_사라[0:3])


실행 결과
>>>
['2.01', '2.22', '2.34']
['2.11', '2.23', '2.59']
['2.22', '2.38', '2.49']
['2.18', '2.25', '2.39']

실행 결과를 보면 4사람의 상위 기록 3개씩 출력 되었다.
이런 방식으로 하면 기록들을 추려내어 사용자가 필요한 정보만을 취합할 수 있을 것이다.

참고 : headfirst python 




댓글()