You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python卡牌洗牌方法问题:嵌套列表被填充为空列表

问题:Python嵌套列表未填充有效数据,仅为空列表

我有Java开发背景,正在学习Python,编写了一个表示扑克牌组的类,其中包含mergeshuffle方法,该方法通过将卡牌拆分为x个堆、反转堆的顺序后从第y堆开始合并来实现洗牌。

目前遇到的核心问题是:嵌套列表stackholder未被填充有效数据,仅被填充了空列表;已测试多数输入输出,其他模块功能符合预期。

相关代码

def mergeshuffle(self, x, y):
    if x > len(self.cards):
        print("Invalid input. Try again using an integer value 1-52")
        return
    elif x < 0:
        print("Invalid input. Try again using an posotive integer value 1-52")
        return
    
    stacks = int(len(self.cards)/x)
    cardsinstack = int(len(self.cards)/stacks)
    print(str(stacks) +" <- stacks cards in stack -> " + str(cardsinstack))
    counter = 0
    stackholder = []   
       
    for i in range(stacks): 
        thisstack = []               
        for x in range(cardsinstack):
           thisstack.append(self.cards[counter])
           #print (" Added " + str(thisstack[x]))  
           #print(str(counter))
           counter=counter+1
        thisstack.reverse()
        stackholder.append(thisstack)
        thisstack.clear()
    print(str(stackholder))
    #print((str(stackholder)).center(10, '&') )

相关输出关键内容

52 playing cards total.
13 <- stacks cards in stack -> 4
[[], [], [], [], [], [], [], [], [], [], [], [], []]

我期望该嵌套列表的每个子列表长度为4,按顺序包含对应分组的卡牌。已调试程序中其他变量,未发现异常,寻求问题原因及解决办法。


问题原因及解决办法

问题原因

你在把thisstack添加到stackholder后调用了thisstack.clear()。Python里列表是可变对象,stackholder.append(thisstack)存的是对thisstack的引用,不是新列表的副本。所以清空thisstack时,stackholder里的子列表也会跟着变空——它们指向的是同一个内存对象。

另外代码里还有个小坑:内层循环用x当循环变量,覆盖了方法参数的x,容易引发逻辑错误,建议换个变量名(比如_或card_idx)。

解决办法

有两种简单修复方式:

  1. 直接移除thisstack.clear():因为每次外层循环都会重新初始化thisstack = [],根本不需要手动清空,这步操作完全多余。
  2. 添加列表副本到stackholder:如果一定要保留清空操作(比如后续复用变量),就存副本而非原引用:
    stackholder.append(thisstack.copy())  # 或者用 thisstack[:] 创建切片副本
    thisstack.clear()
    

内容的提问来源于stack exchange,提问作者Andre Frank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:27:37