我正在尝试使用列表,并尝试显示以下代码段:
----------
---hello--
----------
但要做到这一点,我需要让3' listSmall's彼此独立。有没有办法做到这一点?
(
当前的输出当然是:
---hello--
---hello--
---hello--
)
listSmall = ['-','-','-','-','-','-','-','-','-','-',]
listBig = [listSmall, listSmall, listSmall]
word = 'hello'
wordPosX = 3
wordPosY = 2
for i in word:
listBig[wordPosY][wordPosX] = i
wordPosX = wordPosX + 1
i = 0
while i != 3:
print ''.join(listBig[i])
i = i + 1
答案 0 :(得分:5)
这是因为list
是可变的。
listBig = [listSmall, listSmall, listSmall]
使listBig
三次指向同一个可变列表,因此当您通过这些引用更改此可变列表时,您将看到这三个中的所有更改。
您应该制作三个不同的列表:
listBig = [ ['-'] * 10 for _ in range(3)]
根本不需要listSmall
。
整个代码:
listBig = [ ['-'] * 10 for _ in range(3)]
word = 'hello'
wordPosX, wordPosY = 3, 1
listBig[wordPosY][3: (3+len(word))] = word
for v in listBig:
print(''.join(v))
答案 1 :(得分:3)
使用list
构造函数制作listSmall
listBig = [list(listSmall) for i in range(3)]
另一种等效(不太可读的IMO)方式是使用空切片:
listBig = [listSmall[:] for i in range(3)]
答案 2 :(得分:1)
当您将listSmall
放入listBig
时,您希望复制list
。您可以使用listBig = [list(listSmall), list(listSmall), list(listSmall)]
函数执行此操作:
{{1}}
答案 3 :(得分:0)
仍然可以共享第一个和最后一个列表。
是一种更节省内存的实现listBig = [listSmall, listSmall[:], listSmall]
请注意,第二个使用切片表示法来创建整个listSmall
列表的副本。