【发布时间】:2021-06-20 23:20:49
【问题描述】:
我有以下名为“test_list”的列表:
test_list = [1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, -1.0, -1.0, 1.0,
1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0,
-1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, 1.0,
-1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0,
-1.0, -1.0, -1.0, -1.0, 1.0]
我想遍历列表,并且:
- 如果列表元素 = 1;
- 我想将列表中接下来的 5 个元素的值设置为 0;考虑等待期。
为此,我创建了以下辅助函数:
def adjust_for_wait_period(series_list, wait_period=5):
for i in series_list:
if i == 1:
index = series_list.index(i)
wait_period_list = list(range(1, (wait_period + 1)))
for wait in wait_period_list:
try:
series_list[index + wait] = 0
except Exception as e:
pass
return series_list
当我执行函数时,它只遍历列表的第一个元素并输出这个列表:
[1.0, 0, 0, 0, 0, 0, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0,
1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0,
-1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
-1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0,
-1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0]
而不是这个列表:
[1.0, 0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 0, -1.0,
1.0, 0, 0, 0, 0, 0, -1.0, 1.0, 0, 0, 0,
0, 0, -1.0, -1.0, -1.0, -1.0, 1.0, 0, 0, 0, 0,
0, -1.0, 0, 0, 0, 0, 0, 1.0, 0, 0, 0,
0, 0, -1.0, 1.0, 0, 0, 0, 0, 0, -1.0, 1.0]
这意味着我的函数只遍历第一组值,而不遍历列表的其余部分。
我哪里出错了?
【问题讨论】:
-
第一个
1.0不变,所以index = series_list.index(i)总是返回第一个1.0的索引。看看enumerate一起迭代值和索引 -
为什么预期的结果不是
[1.0, 0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 0, -1.0, 1.0, 0, 0, 0, 0, 0, -1.0, 1.0, 0, 0, 0, 0, 0, -1.0, -1.0, -1.0, -1.0, 1.0, 0, 0, 0, 0, 0, -1.0, 1.0, 0, 0, 0, 0, 0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 0, 0, 0, 0, 0, -1.0, 1.0]?
标签: python list for-loop iteration