这个循环可以在列表理解中完成吗?
Can this loop be done in a list comprehension?
来自这个问题
我很好奇提到的循环是否可以在列表理解中完成?
array = [3,4,2,5,4,5,8,7,8,9]
value = 10
for i in range(1,10):
array[i] = array[i-1] + value
我想也许是海象运算符。
我的尝试给了我一个错误,导致
[array[count] := val if count == 0 else array[count] := array[count-1] + value for count,val in enumerate(array)]
有什么想法吗?
我们可以观察到,如果我们得到的数组是 result
,那么 result[i] = array[0] + i * value
。
例如:
result[0] = array[0]
result[1] = result[0] + value = array[0] + 1 * value
result[2] = result[1] + value = array[0] + 2 * value
- 等等
从代码得知,一般可以表示为:
result[0] = array[0]
result[i] = result[i - 1] + value
对于 i > 0
.
那么,列表解析就变成了:
result = [array[0] + i * value for i in range(len(array))]
发生错误是因为 array[count]
不是变量标识符,而是列表 array
中的一个位置,因此您不能为其分配任何内容。
您可以使用以下...
array = [3,4,2,5,4,5,8,7,8,9]
value = 10
res = [(first_val := array[count]) if count==0 else array[count-1]+(count*value) for count,val in enumerate(array)]
print(res)
print(first_val)
输出:-
[3, 13, 14, 12, 15, 14, 15, 18, 17, 18]
3
for 循环仅使用第一个元素并用全新的项目覆盖 array
。使用以下列表理解可以实现完全相同的结果:
array = [array[0] + i*value for i in range(len(array))]
输出:
[3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
来自这个问题
我很好奇提到的循环是否可以在列表理解中完成?
array = [3,4,2,5,4,5,8,7,8,9]
value = 10
for i in range(1,10):
array[i] = array[i-1] + value
我想也许是海象运算符。
我的尝试给了我一个错误,导致
[array[count] := val if count == 0 else array[count] := array[count-1] + value for count,val in enumerate(array)]
有什么想法吗?
我们可以观察到,如果我们得到的数组是 result
,那么 result[i] = array[0] + i * value
。
例如:
result[0] = array[0]
result[1] = result[0] + value = array[0] + 1 * value
result[2] = result[1] + value = array[0] + 2 * value
- 等等
从代码得知,一般可以表示为:
result[0] = array[0]
result[i] = result[i - 1] + value
对于i > 0
.
那么,列表解析就变成了:
result = [array[0] + i * value for i in range(len(array))]
发生错误是因为 array[count]
不是变量标识符,而是列表 array
中的一个位置,因此您不能为其分配任何内容。
您可以使用以下...
array = [3,4,2,5,4,5,8,7,8,9]
value = 10
res = [(first_val := array[count]) if count==0 else array[count-1]+(count*value) for count,val in enumerate(array)]
print(res)
print(first_val)
输出:-
[3, 13, 14, 12, 15, 14, 15, 18, 17, 18]
3
for 循环仅使用第一个元素并用全新的项目覆盖 array
。使用以下列表理解可以实现完全相同的结果:
array = [array[0] + i*value for i in range(len(array))]
输出:
[3, 13, 23, 33, 43, 53, 63, 73, 83, 93]