После вашего разъяснения - на самом деле, это не так, если вы выглядите лучше, у вас есть это:
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 ...
])
ie:
print max([reduce(...) for x in ... for y in ... for d in ...])
, что является списком, таким как тот, который вы дали в качестве примера ([x for x in line.split()]
).
См. документацию:
Выдержка:
макс. (Итерируемый [, аргументы ...] [ключ])
с итерацией с одним аргументом,вернуть самый большой элемент непустой итерации (такой как строка, кортеж или список).С более чем одним аргументом верните самый большой из аргументов.
Вы можете сделать, например, так:
>>> max(1, 2, 3)
3
т.е. запустить max с несколькими параметрами, и это даст ваммаксимум из них, или, например, вы можете сделать это:
>>> 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
Надеюсь, это поможет.