这里是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
的所有变体,这意味着索引是旋转的,以便每个索引都是第一个。然后,这些变体被附加到另一个列表中,即代码中的var_list
。
然而,我并没有从while循环中得到期望的结果。在while循环中,代码片段print init_list
实际上打印了我想要的变量;但是下一行代码var_list.append(init_list)
没有附加这些变量。相反,在第5行创建的init_list
被重复地附加到var_list
中。
这是怎么回事?以及如何获取while循环中创建的init_list
的不同变体,以附加到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']]
用这条线
每次都要添加对
init_list
的引用。但是你需要创建一个新的列表。用这个说明
当您打印
init_list
时,它会打印当前状态。当您将其添加到var_list
时,您不会添加当前状态。您正在添加引用。因此,当实际列表更改时,所有引用都指向同一数据。你可以这样简化你的程序
下面是一些代码,它们可以以一种更简单的方式满足我的需求:
输出:
或者可以使用这个简单的生成器:
相关问题 更多 >
编程相关推荐