1

ループ内のリスト要素/アイテムを更新/変更することは可能ですか?ここで私はのアイテムを変更する必要があります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ループ内で更新されていないようです。

リストのアイテム/要素をループで更新することはできませんか?

4

2 に答える 2

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']
于 2014-08-10T23:37:48.140 に答える
0

インデックスを使用してループせず、最初にstで初期化する必要がないメソッドを次に示します。'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)
于 2014-08-11T00:10:10.077 に答える