[python] 파이썬 : 튜플 목록에서 최소, 최대 값 찾기


1 Answers

>>> from operator import itemgetter
>>> alist = [(1,3),(2,5),(2,4),(7,5)]
>>> min(alist)[0], max(alist)[0]
(1, 7)
>>> min(alist, key=itemgetter(1))[1], max(alist, key=itemgetter(1))[1]
(3, 5)
Question
alist = [(1,3),(2,5),(2,4),(7,5)]

튜플의 각 위치에 대한 최소 최대 값을 가져와야합니다.

여우 예 : alist의 exepected 출력은 다음과 같습니다.

min_x = 1
max_x = 7

min_y = 3
max_y = 5

할 수있는 쉬운 방법이 있습니까?




일반적인 접근법은 다음과 같습니다.

alist = [(1,6),(2,5),(2,4),(7,5)]

temp = map(sorted, zip(*alist))
min_x, max_x, min_y, max_y = temp[0][0], temp[0][-1], temp[1][0], temp[1][-1]

파이썬 3의 경우, temp 를 생성하는 라인을 다음과 같이 변경해야합니다 :

temp = tuple(map(sorted, zip(*alist)))

아이디어는 파이썬 2와 3 모두에서 작동하는 함수로 추상화 될 수 있습니다.

from __future__ import print_function
try:
    from functools import reduce  # moved into functools in release 2.6
except ImportError:
    pass

# readable version
def minmaxes(seq):
    pairs = tuple()
    for s in map(sorted, zip(*seq)):
        pairs += (s[0], s[-1])
    return pairs

# functional version
def minmaxes(seq):
    return reduce(tuple.__add__, ((s[0], s[-1]) for s in map(sorted, zip(*seq))))

alist = [(1,6), (2,5), (2,4), (7,5)]
min_x, max_x, min_y, max_y = minmaxes(alist)
print(' '.join(['{},{}']*2).format(*minmaxes(alist)))  # 1,7 4,6

triplets = [(1,6,6), (2,5,3), (2,4,9), (7,5,6)]
min_x, max_x, min_y, max_y, min_z, max_z = minmaxes(triplets)
print(' '.join(['{},{}']*3).format(*minmaxes(triplets)))  # 1,7 4,6 3,9


Related