2012-02-22 2 views
1

이 게시 문제 참조 인 (mayoff)명확화

grid = [[0]*23]*3 + [[int(x) for x in line.split()]+[0,0,0] for line in 
'''08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48'''.split('\n') 
] + [[0]*23]*3 

import operator 

print max([reduce(operator.mul, [grid[y+n*d[0]][x+n*d[1]] for n in (0,1,2,3)]) 
     for x in xrange(0,20) for y in xrange(3,23) 
     for d in ((0,1),(1,0),(1,1),(-1,1))]) 

그리드는 문제에 주어진 20x20 매트릭스와 동일한 2 차원 매트릭스입니다. max() 함수에 대한 나의 이해는 정수 목록을 입력으로 취한 다음 최대 값을 선택하여이를 반환한다는 것입니다.

마지막 식의 후속 for-loops가 max()의 매개 변수 목록 외부에있는 이유는 무엇입니까? A의 루프를 사용하여 목록을 작성하기 위해 우리는 다음과 함께 할 수 있기 때문에 이것은 나에게 혼란을 소리 :

>>> line = "12 12 12 12 12 12" 
>>> [x for x in line.split()] 
['12','12','12','12','12','12'] 

하고 설명 후 오류

>>> [x] for x in line.split() 
+3

그럼 뭐가 문제입니까? – CppLearner

+0

http://docs.python.org/library/functions.html#max에 명시된 'max'관련 문제가 있습니까? –

+0

그것은 for 루프의 바깥 쪽이 아니고, reduce 함수 바깥 쪽이 아니라리스트 이해어'max ([reduce .. for ... for ... for ...]) 안에 있습니다.' – platinummonkey

답변

2

로 초래 아래에 비슷한 일을 - 실제로, 그들은 당신이 더 나은 보면, 당신이 가지고되지 않습니다

print max(
     [ 
     reduce(
      operator.mul, 
      [grid[y+n*d[0]][x+n*d[1]] for n in (0,1,2,3)]) 
     for x in xrange(0,20) 
     for y in xrange(3,23) 
     for d in ((0,1),(1,0),(1,1),(-1,1)) 
     ]) 

일부 혼란을 줄이기 위해를, 당신이해야하는 것은 이것이다 :

print max(
     [ 
     reduce(...) 
     for x in ... 
     for y in ... 
     for d in ... 
     ]) 

즉 : 같은 당신은 예 ([x for x in line.split()] )으로 준 하나로서 지능형리스트입니다

print max([reduce(...) for x in ... for y in ... for d in ...]) 

. 단일로

최대 (반복 가능 [인수 ...] [키])

:

발췌 :

은 설명서를 참조하십시오 인수 iterable, 비어 있지 않은 iterable (문자열, 튜플 또는 목록과 같은)의 가장 큰 항목을 반환합니다. 둘 이상의 인수가 있으면 가장 큰 인수를 리턴하십시오.

이 :

>>> max(1, 2, 3) 
3 

즉 실행 매개 변수와 함께 최대 그것은 당신이 최대를 제공, 또는 예를 들어합니다 당신은이 작업을 수행 할 수 있습니다

>>> max([1,2,3]) 
3 

과는 반복자로 취급하고 반복 가능한 당신에게 최대를 제공 할 것입니다.이 작업을 수행 할 수 있도록 문자열도, 반복 가능 객체입니다

>>> max("aqrmn") 
'r' 

나이 :

이 사전의 키를 고려
>>> max(dict(the=1,biggest=-1,word=2,maybe=4,this=0)) 
'word' 

, 아마 쉽게는 다음과 같이 이해하기 :

>>> max({1:"hey", 5:"man", -3:"how", 7:"are", 3: "you?"}) 
7 

희망이 도움이됩니다.

+0

Enter 키가 엉망이되어 이전 질문을 편집했습니다. 미안하지만 어쨌든 도움을 주셔서 감사합니다. – akino

+0

코드 재 배열 주셔서 감사합니다. =) 그것은 원본을 혼란스럽게 보였다. – akino

0
>> help(max) 
max(...) 
    max(iterable[, key=func]) -> value 
    max(a, b, c, ...[, key=func]) -> value 

    With a single iterable argument, return its largest item. 
    With two or more arguments, return the largest argument. 

최대 값은 최대 값을 반환합니다. 위치를 원한다면 :

a = [reduce(operator.mul, [grid[y+n*d[0]][x+n*d[1]] for n in (0,1,2,3)]) 
     for x in xrange(0,20) for y in xrange(3,23) 
     for d in ((0,1),(1,0),(1,1),(-1,1)) 
max_value = max(a) 
max_value_position = a.index(max_value) 

당신이 원하는 것을 정확하게 모르십시오. 그러나 당신은 창조 된 명부의 최대 가치를 얻었습니다.

관련 문제