gpt4 book ai didi

python - python 中 max() 语法的澄清

转载 作者:行者123 更新时间:2023-12-01 06:02:53 25 4
gpt4 key购买 nike

这是引用以下位置发布的问题: http://projecteuler.net/problem=11

我遇到了使用 python 的过于简单的解决方案,如下所示:(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 矩阵。我对 max() 函数的理解是,它接受一个整数列表作为输入,然后从中选择最大值并返回它。

问题是,为什么最后一个表达式中后续的 for 循环位于 max() 的参数列表之外?这听起来让我很困惑,因为要使用 for 循环创建列表,我们可以使用以下命令来完成:

>>> 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()

最佳答案

在你澄清之后 - 事实上,他们不是,如果你看起来更好,你有这个:

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 ...
])

即:

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

这是一个列表理解,例如您作为示例给出的列表理解([x for x in line.split()] )。

查看文档:

摘录:

max(iterable[, args...][key])

With a single argument iterable, return the largest item of a non-empty iterable (such as a string, tuple or list). With more than one argument, return the largest of the arguments.

你可以这样做这个:

>>> 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

希望这有帮助。

关于python - python 中 max() 语法的澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9388656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com