istareYY 2024-04-23 11:13 采纳率: 0%
浏览 6

Python学习中,求指导

统计数字1,2,3,4一共能组成多少个不同的三位整数。我用列表实现,为什么最后的输出全是432?难道我对append的使用错误吗?


list_1=['0','0','0']
list_2=['1','2','3','4']
list_3=[]
for i in range(4):
    for j in range(4):
        for k in range(4):
            if i!=j and i!=k and j!=k:
                list_1[0]=list_2[i]
                list_1[1]=list_2[j]
                list_1[2]=list_2[k]
                list_3.append(list_1)
for x in list_3:
    print(" ".join(x))
  • 写回答

7条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-23 11:13
    关注

    引自免费微信小程序:皆我百晓生

    在你的代码里,list_1 是一个全局变量,在每次循环中都被修改并添加到 list_3 中。因此,当循环结束时,list_3 中的所有元素实际上都引用了同一个 list_1 对象。这意味着对 list_1 的任何修改都会影响到 list_3 中所有元素。

    为了解决这个问题,你需要在每次循环内部创建一个新的列表,而不是修改现有的 list_1。可以使用列表推导式简化代码,并解决这个问题。以下是修改后的代码:

    list_2 = ['1', '2', '3', '4']
    list_3 = []
    
    # 使用列表推导式生成所有可能的组合
    for i in range(4):
        for j in range(4):
            for k in range(4):
                if i != j and i != k and j != k:
                    # 创建一个新的列表,而不是修改 existing_list
                    new_list = [list_2[i], list_2[j], list_2[k]]
                    list_3.append(new_list)
    
    # 打印结果
    for x in list_3:
        print(" ".join(x))
    

    这段代码会正确地生成并打印出所有不同的三位数组合。注意这里不再使用 list_1,而是每次在内层循环中创建一个新的列表 new_list,然后将其添加到 list_3 中。这样就不会有引用同一对象的问题了。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月23日

悬赏问题

  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
  • ¥15 netcore使用PuppeteerSharp截图
  • ¥20 这张图页头,页脚具体代码该怎么写?
  • ¥15 关于#sql#的问题,请各位专家解答!
  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂