制作一个独立的列表(?)

时间:2013-04-28 05:27:57

标签: python list

我正在尝试使用列表,并尝试显示以下代码段:

----------
---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

4 个答案:

答案 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列表的副本。