파이썬은 built-in min
function 있습니다. 그러나 나는 당신 자신의 것을 쓰는 것이 좋은 학습 운동이라고 생각한다.
test
함수의 수정 된 버전을 만들어 최소 요소가 포함 된 하위 목록을 찾는 함수를 작성할 수 있습니다.
핵심 아이디어는 각 하위 목록의 최소값을 찾는 것이고 새로운 최소값을 찾으면 최소값이 나온 하위 목록을 저장합니다.
아래 코드에서보다 의미있는 기능 이름을 test
에서 minimum
으로 변경했습니다.
def minimum(list1):
''' Finds smallest item in list1 '''
x = list1[0]
for i in list1:
if i < x:
x = i
return x
def least(list2d):
minseq = list2d[0]
x = minimum(minseq)
for seq in list2d[1:]:
i = minimum(seq)
if i < x:
x = i
minseq = seq
print('In {} the least number is {} found in sublist {}'.format(list2d, x, minseq))
# Test
data = [[2, 4, 3], [1, 7, 9, 4], [6, 7, 5]]
least(data)
출력
In [[2, 4, 3], [1, 7, 9, 4], [6, 7, 5]] the least number is 1 found in sublist [1, 7, 9, 4]
그러나, 우리가 사용하여보다 컴팩트 한 방법이 쓸 수있는 내장 min
기능을 우리의 작은 하위 목록을 찾을 수 있습니다. 여기서 우리는 min
을 호출하여 각 하위 목록의 최소 항목을 찾은 다음 해당 하위 항목을 사용하여 어떤 하위 목록이 최소 목록인지 결정합니다.
def least(list2d):
minseq = min(list2d, key=min)
x = min(minseq)
print('In {} the least number is {} found in sublist {}'.format(list2d, x, minseq))
이 버전은 가장 작은 항목이 두 번있는 하위 목록의 최소값을 계산하므로 약간 비효율적입니다. 우리가 min
에게 발전기 표현 전달할 수 있다는 방지하려면 :
def least(list2d):
x, minseq = min((min(seq), seq) for seq in list2d)
print('In {} the least number is {} found in sublist {}'.format(list2d, x, minseq))
그 발전기 표현이 각 하위 목록의 튜플와 최소를 만듭니다, 그 튜플은 다음 가장 작은 최소가 포함 된 튜플을 찾기 위해 외부 min
호출에 전달된다 .2 개 이상의 튜플이 최소로 연결되면 터플 자체가 비교되어 승자를 결정합니다. 당신이 처리하는 파이썬 방법을 필요로하는 경우
형식 코드 당신은 ** 재귀를 사용하거나/큐 스택해야합니다 –
하십시오 **. 목록이 중첩 될 수 있으므로 (다른 유사한 목록 일 수 있음) 항목 내부의 최소 항목을 검색해야하며 모든 항목의 결과를 비교해야합니다. –
또한 항상 중첩 수준이 한 가지입니까? 또는 n 차원 목록을 지원 하시겠습니까? –