【发布时间】:2018-03-06 01:22:53
【问题描述】:
我是 python 的新手。我正在解决 Hackerrank https://www.hackerrank.com/challenges/maximize-it/problem 上的一个问题。
我无法解决问题,所以我开始讨论。我在那里找到了一个代码 -
from itertools import product
K,M = map(int,input().split())
N = (list(map(int, input().split()))[1:] for _ in range(K))
results = map(lambda x: sum(i**2 for i in x)%M, product(*N))
print(max(results))
我有两个疑问:
- 首先,如果我尝试打印N,它会抛出“生成器对象不可下标”错误,但该值已经转换为列表,所以我无法理解错误原因。
- 我无法理解
results=map(lambda x: sum(i**2 for i in x)%M, product(*N))会存储什么。
我了解product(*N) 的作用。但是sum(i**2 for i in x)%M 的输出是什么?它是添加列表值的平方然后执行取模运算吗?还是别的什么?
【问题讨论】:
-
"但该值已转换为列表" 不,不是。 N 是一个生成器。
-
我可以从错误中理解这一点。但为什么会这样呢?
-
使用
()括号代替[]括号。[]表示list存储在内存中。()表示动态生成每个值的生成器。
标签: python python-3.x list