是否可以更新/修改循环中的列表元素/项目。在这里,我必须修改t
n_wk=[1,2,3,2,3,4,2,3]
t=['a','a','a','a','a','a','a','a']
for i in range(len(n_wk)):
if i==0:
continue
if n_wk[i]<n_wk[i-1]:
if t[i]=='a':
t[i]='b'
elif t[i]=='b':
t[i]='c'
if n_wk[i]>n_wk[i-1]:
t[i]=t[i-1]
我期待输出t = ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c']
。但是,输出结果为t=['a', 'a', 'a', 'b', 'b', 'b', 'b', 'b']
。好像list t
似乎没有在循环中更新。
我们不能在循环中更新列表的项目/元素吗?
答案 0 :(得分:1)
您的列表t
确实正在修改:
# t before loop
['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']
# t after loop
['a', 'a', 'a', 'b', 'b', 'b', 'b', 'b']
但是,您的代码稍有变化就会为您提供所需的结果:
for i in range(len(n_wk)):
if i == 0:
continue
if n_wk[i] < n_wk[i-1]:
if t[i-1] == 'a': #changed from t[i]
t[i] = 'b'
elif t[i-1] == 'b': #changed from t[i]
t[i] = 'c'
if n_wk[i] > n_wk[i-1]:
t[i] = t[i-1]
print(t)
# ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c']
答案 1 :(得分:0)
这是一个不使用索引循环的方法,并且不需要t
初始化'a'
来开始:
n_wk = [1,2,3,2,3,4,2,3]
t = []
n_prev = 0
t_prev = 'a'
for n in n_wk:
t_new = t_prev
if n < n_prev:
if t_prev == 'a':
t_new = 'b'
elif t_prev == 'b':
t_new = 'c'
t.append(t_new)
n_prev = n
t_prev = t_new
print(t)