【问题标题】:Python List Assignment IssuesPython 列表分配问题
【发布时间】:2017-08-24 02:18:32
【问题描述】:
#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] ] 等等。由于某种原因,这项任务不起作用。提前致谢。

【问题讨论】:

  • 你追加filler 52次。

标签: python list variable-assignment


【解决方案1】:

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

deck.append(filler[:])

【讨论】:

  • 你不插入它,你替换看起来非常非常相似的单行代码。
【解决方案2】:

试试这个

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

【讨论】:

    【解决方案3】:

    您确定要获取 [[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 ],……] 你的代码应该是这样的:
    甲板= []

    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)
    

    【讨论】:

      【解决方案4】:

      我认为它的问题是 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-26
        • 1970-01-01
        • 1970-01-01
        • 2023-02-11
        • 1970-01-01
        • 2011-12-16
        • 1970-01-01
        • 2010-11-21
        相关资源
        最近更新 更多