Python列表分配问题

时间:2017-08-24 02:18:33

标签: python list variable-assignment

#DeckOfCards
deck = []

filler= [0, 0, 0, 0]

def deck_generator():

    counter = 0
    for i in range (52):
        counter += 1
        deck.append(filler)
    return deck

def deck_values(i):

    k = 4
    temp = (i + 1) % k
    return temp
deck = deck_generator()

for i in range(52):

    deck[i][0] = deck_values(i)

此代码的目标是将内部列表的第一个索引的0-3值分配给外部列表中的所有值。 [[0,0,0,0],[1,0,0,0],[2,0,0,0],[3,0,0,0],[0,0,0,0] ] 等等。由于某种原因,任务不起作用。提前致谢。

4 个答案:

答案 0 :(得分:1)

附加列表的副本而不是列表本身。

deck.append(filler[:])

答案 1 :(得分:0)

试试这个

deck = []
for i in range(52):
  deck.append([i % 4, 0, 0, 0])
print (deck)

运行此代码打印(为便于查看而编辑):

[[0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
 [0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
 [0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
 [0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
 [0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
 [0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
 [0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
 [0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
 [0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
 [0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
 [0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
 [0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
 [0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0]]

答案 2 :(得分:0)

你确定你想要[[0,0,0,0],[1,0,0,0],[2,0,0,0],[3,0,0,0] ,[0,0,0,0]]?

首先,您应该使用过滤器的副本,然后您可以获得如下列表:
[[1,0,0,0],[2,0,0,0],[3,0,0,0],[0,0,0,0],......]

但是如果你想得到结果[[0,0,0,0],[1,0,0,0],[2,0,0,0],[3,0,0,0] ],...] 你的代码应该是这样的:
    deck = []

filler= [0, 0, 0, 0]

def deck_generator():

    counter = 0
    for i in range (52):
        counter += 1
        deck.append(filler[:])
    return deck

def deck_values(i):

    k = 4
    temp = i % k      #not temp = (i+1) % k
    return temp


deck = deck_generator()

for i in range(52):

    deck[i][0] = deck_values(i)

print(deck)

答案 3 :(得分:0)

我认为它的问题是temp =(i + 1)%k,因为我们不需要添加1到1.它应该从0开始。除此之外,你需要正确追加以便它起作用。代码如下所示:

#DeckOfCards
deck = []

filler= [0, 0, 0, 0]

def deck_generator():

    counter = 0
    for i in range (52):
        counter += 1
        deck.append(filler[:])
    return deck

def deck_values(i):

    k = 4
    temp = (i) % k
    return temp

deck = deck_generator()

for i in range(52):

    deck[i][0] = deck_values(i)