我定义了一个更改列表的功能(基本上将最后一项移到列表的开头),然后我尝试使用此功能创建2d列表。
这是一些代码:
prevRow = ["blue", "yellow", "red", "black", "white"]
def nextRow():
prevRow.insert((0, prevRow.pop()))
print(prevRow)
return prevRow
tablePreset = [["blue", "yellow", "red", "black", "white"], nextRow(), nextRow(), nextRow(), nextRow()]
print(tablePreset)
prevRow = ["blue", "yellow", "red", "black", "white"]
tablePreset = [["blue", "yellow", "red", "black", "white"]]
def nextRow():
prevRow.insert((0, prevRow.pop()))
print(prevRow)
return prevRow
for _ in range(4):
tablePreset.append(nextRow())
print(tablePreset)
在两种情况下我都知道了
['white', 'blue', 'yellow', 'red', 'black']
['black', 'white', 'blue', 'yellow', 'red']
['red', 'black', 'white', 'blue', 'yellow']
['yellow', 'red', 'black', 'white', 'blue']
[['blue', 'yellow', 'red', 'black', 'white'], ['yellow', 'red', 'black', 'white', 'blue'], ['yellow', 'red', 'black', 'white', 'blue'], ['yellow', 'red', 'black', 'white', 'blue'], ['yellow', 'red', 'black', 'white', 'blue']]
我不知道为什么,但是即使我调用了4次函数,列表中的每个返回值都与最后一个值相同(该函数内部的打印用于调试目的)。
如果有人帮助我,我会非常满足的:)
答案 0 :(得分:0)
每次将列表传递给函数nextRow
时,都需要复制该列表(请参见下面的代码)。 here(相关主题)的更多信息。
prevRow = ["blue", "yellow", "red", "black", "white"]
tablePreset = [["blue", "yellow", "red", "black", "white"]]
def nextRow(prevRow):
prevRow_copy = prevRow.copy()
prevRow_copy.insert(0, prevRow_copy.pop())
return prevRow_copy
for _ in range(4):
prevRow = nextRow(prevRow)
tablePreset.append(prevRow)
print(tablePreset)
# >> out:
# [['blue', 'yellow', 'red', 'black', 'white'],
# ['white', 'blue', 'yellow', 'red', 'black'],
# ['black', 'white', 'blue', 'yellow', 'red'],
# ['red', 'black', 'white', 'blue', 'yellow'],
# ['yellow', 'red', 'black', 'white', 'blue']]
另一个说明副本重要性的小例子:
a = []
b = [1,2,3]
a.append(b)
b.pop()
a.append(b)
b.pop()
a.append(b)
print(a)
# >> out:
# [[1], [1], [1]]
a = []
b = [1,2,3]
a.append(b.copy())
b.pop()
a.append(b.copy())
b.pop()
a.append(b.copy())
print(a)
# >> out:
# [[1, 2, 3], [1, 2], [1]]