为这个序列写一个 generator/iterator 表达式
Write an generator/iterator expression for this sequence
这个练习我看不懂
假设我们有一个整数列表 X。我们需要构建此列表中等于最大元素的元素的索引(位置)序列。序列中的指标按升序排列。
提示使用枚举函数
from typing import Iterator
X = [1,10,3,4,10,5]
S : Iterator[int] = YOUR_EXPRESSION
assert list(S)==[1,4]
这是我唯一能想到的,但肯定不会 return [1,4]
如果你想知道我不明白的地方,从阅读描述中不清楚它是如何做到的 return [1,4].
也许你想先向我解释一下...
这是我的(错误的)解决方案
my_enumerate=enumerate (X)
my_enumerate=(list(my_enumerate))
my_enumerate.sort(reverse=True)
你可以像这样使用生成器
max_val=max(X)
s = (i for i, v in enumerate(X) if v==max_val)
这需要两个步骤:
- 求最大值
max
- 迭代列表的索引并保留具有此最大值的索引
为了避免糟糕的时间复杂度,有必要不重复第一步:
S : Iterator[int] = (lambda mx:
(i for i, x in enumerate(X) if x == mx)
)(max(X))
之所以用这么丑陋的表达方式呈现代码,是因为在问题中似乎要求遵循模板,并且只更改标有“YOUR_EXPRESSION”的部分。
如果没有这种人为的限制,您将不会这样写。您只需执行 mx = max(X)
,然后在下一条语句中将迭代器分配给 S
,而无需此内联 lambda。
所以你有包含 [1,10,3,4,10,5]
的列表 X。最大或最大元素为 10。这意味着我们应该 return 找到 10 的所有索引的列表。索引 1 和 4 分别有两个 10。
使用枚举,您可以在每次迭代中获得索引和元素。您可以使用它来过滤掉不需要的元素。列表理解在这种情况下很有用,允许使用 if 语法进行过滤,即 [val for val in items if some_condition]
这是我的解决方案
( x[0] for x in enumerate (X) if x[1] == max(X) )
这是书中的解答
(i for (i, n) in enumerate(X) if n == max(X))
这个练习我看不懂
假设我们有一个整数列表 X。我们需要构建此列表中等于最大元素的元素的索引(位置)序列。序列中的指标按升序排列。
提示使用枚举函数
from typing import Iterator
X = [1,10,3,4,10,5]
S : Iterator[int] = YOUR_EXPRESSION
assert list(S)==[1,4]
这是我唯一能想到的,但肯定不会 return [1,4]
如果你想知道我不明白的地方,从阅读描述中不清楚它是如何做到的 return [1,4].
也许你想先向我解释一下...
这是我的(错误的)解决方案
my_enumerate=enumerate (X)
my_enumerate=(list(my_enumerate))
my_enumerate.sort(reverse=True)
你可以像这样使用生成器
max_val=max(X)
s = (i for i, v in enumerate(X) if v==max_val)
这需要两个步骤:
- 求最大值
max
- 迭代列表的索引并保留具有此最大值的索引
为了避免糟糕的时间复杂度,有必要不重复第一步:
S : Iterator[int] = (lambda mx:
(i for i, x in enumerate(X) if x == mx)
)(max(X))
之所以用这么丑陋的表达方式呈现代码,是因为在问题中似乎要求遵循模板,并且只更改标有“YOUR_EXPRESSION”的部分。
如果没有这种人为的限制,您将不会这样写。您只需执行 mx = max(X)
,然后在下一条语句中将迭代器分配给 S
,而无需此内联 lambda。
所以你有包含 [1,10,3,4,10,5]
的列表 X。最大或最大元素为 10。这意味着我们应该 return 找到 10 的所有索引的列表。索引 1 和 4 分别有两个 10。
使用枚举,您可以在每次迭代中获得索引和元素。您可以使用它来过滤掉不需要的元素。列表理解在这种情况下很有用,允许使用 if 语法进行过滤,即 [val for val in items if some_condition]
这是我的解决方案
( x[0] for x in enumerate (X) if x[1] == max(X) )
这是书中的解答
(i for (i, n) in enumerate(X) if n == max(X))