2

ここではPython/プログラミングの初心者で、このwhileループで何が起こっているのかを理解しようとしています. 最初のコード:

var_list = []
split_string = "pink penguins,green shirts,blue jeans,fried tasty chicken,old-style boots"

def create_variations(split_string):
    init_list = split_string.split(',')
    first_element = init_list[0]

    # change first element of list to prepare for while loop iterations
    popped = init_list.pop()
    added = init_list.insert(0, popped)

    while init_list[0] != first_element:
        popped = init_list.pop()
        added = init_list.insert(0, popped)
        print init_list # prints as expected, with popped element inserted to index[0] on each iteration
        var_list.append(init_list) # keeps appending the same 'init_list' as defined on line 5, not those altered in the loop!

    print var_list

create_variations(split_string)

私の目的は、 のすべてのバリエーションを作成することですinit_list。つまり、各インデックスが 1 回だけ最初になるようにインデックスをローテーションします。これらのバリエーションは、var_listこのコードの である別のリストに追加されます。

ただし、while ループから期待する結果が得られません。while ループでは、コードの一部がprint init_list実際に必要なバリエーションを出力します。しかし、コードの次の行はvar_list.append(init_list)これらのバリエーションを追加しません。代わりに、init_list5 行目で作成された as が に繰り返し追加されますvar_list

ここで何が起こっているのですか?init_listまた、while ループで作成された のさまざまなバリエーションを に追加するにはどうすればよいですかvar_list

私が期待する出力var_list

[['fried tasty chicken', 'old-style boots', 'pink penguins', 'green shirts', 'blue jeans'],
 ['blue jeans', 'fried tasty chicken', 'old-style boots', 'pink penguins', 'green shirts'],
 ['green shirts', 'blue jeans', 'fried tasty chicken', 'old-style boots', 'pink penguins'],
 ['pink penguins', 'green shirts', 'blue jeans', 'fried tasty chicken', 'old-style boots']]
4

2 に答える 2