首页 > 编程问答 >通过删除元素垂直打印二维列表的问题

通过删除元素垂直打印二维列表的问题

时间:2024-07-31 09:46:14浏览次数:8  
标签:python string nested-lists

我有这个函数,它接受一个二维数组,并返回一个字符串。该字符串应该有列,其中每列都是二维数组中的列表。由于某种原因,打印中间 3 个列表时出现问题,我不明白为什么。有谁知道出了什么问题吗?


    def printFancyNetwork(self) -> None:
       
        temp_network: list = self.network
        to_be_printed: str = ""

        while True:
            total_empty: int = 0

            for layer in temp_network:
                if len(layer) != 0:
                    to_be_printed += f"{layer[0]}    "
                    layer.pop(0)
                else:
                    total_empty += 1
                    to_be_printed += "      "
                  
            to_be_printed += "\n"

            if total_empty == len(temp_network):
                    return to_be_printed
                    

这里有一些测试输出,其中每个块都是 for 循环中的迭代(初始列表和最终字符串除外)

Inital: [[0.5, 0.5], [0.4, 0.4, 0.4], [0.4, 0.4, 0.4], [0.4, 0.4, 0.4], [0.3, 0.3, 0.3, 0.3]]

[[0.5], [0.4, 0.4, 0.4], [0.4, 0.4, 0.4], [0.4, 0.4, 0.4], [0.3, 0.3, 0.3, 0.3]]
[[0.5], [0.4, 0.4], [0.4, 0.4], [0.4, 0.4], [0.3, 0.3, 0.3, 0.3]]
[[0.5], [0.4], [0.4], [0.4], [0.3, 0.3, 0.3, 0.3]]
[[0.5], [], [], [], [0.3, 0.3, 0.3, 0.3]]
[[0.5], [], [], [], [0.3, 0.3, 0.3]]

[[], [], [], [], [0.3, 0.3, 0.3]]
[[], [], [], [], [0.3, 0.3, 0.3]]
[[], [], [], [], [0.3, 0.3, 0.3]]
[[], [], [], [], [0.3, 0.3, 0.3]]
[[], [], [], [], [0.3, 0.3]]

[[], [], [], [], [0.3, 0.3]]
[[], [], [], [], [0.3, 0.3]]
[[], [], [], [], [0.3, 0.3]]
[[], [], [], [], [0.3, 0.3]]
[[], [], [], [], [0.3]]

[[], [], [], [], [0.3]]
[[], [], [], [], [0.3]]
[[], [], [], [], [0.3]]
[[], [], [], [], [0.3]]
[[], [], [], [], []]

[[], [], [], [], []]
[[], [], [], [], []]
[[], [], [], [], []]
[[], [], [], [], []]
[[], [], [], [], []]

Final:
0.5    0.4    0.4    0.4    0.3
0.5                      0.3
                        0.3
                        0.3

我尝试使用

self.network.copy()

创建一个副本,但没有似乎有效果


问题在于,在 temp_network 中对列表进行切片时,你实际上也在修改原始列表 self.network 。这是因为 copy() 创建的是一个浅拷贝,它会复制列表引用而不是创建列表本身的副本。

为了解决这个问题,你需要在 printFancyNetwork 函数中创建一个 self.network 的深拷贝。深拷贝会创建一个全新的对象副本,包括其中的所有嵌套对象。你可以使用 copy.deepcopy() 函数来实现这一点。

以下是如何修改你的代码的方法:

import copy

class YourClass:  # 将 YourClass 替换为你的实际类名
    # ... 你的其他代码 ...

    def printFancyNetwork(self) -> None:

        temp_network: list = copy.deepcopy(self.network)
        to_be_printed: str = ""

        while True:
            total_empty: int = 0

            for layer in temp_network:
                if len(layer) != 0:
                    to_be_printed += f"{layer[0]}    "
                    layer.pop(0)
                else:
                    total_empty += 1
                    to_be_printed += "      "

            to_be_printed += "\n"

            if total_empty == len(temp_network):
                return to_be_printed

通过使用 copy.deepcopy() ,你在 temp_network 中拥有了 self.network 的一个完全独立的副本。这样一来,在 temp_network 上执行的切片操作就不会影响原始的 self.network

标签:python,string,nested-lists
From: 78814164

相关文章

  • Python - Composition
     classEngine:def__init__(self,power):self.power=powerdefstart(self):self.draw_current()self.spin()self.ignite()defdraw_current(self):print('Drawingcurrent')defspin(sel......
  • Python - Iterator vs Iterable
    Therearemanybuilt-infunctionsandmethodsthatreturniterablesanditerators.Hereareafewexamples:range()returnsaniterabledict.keys()returnsaniterabledict.items()returnsaniterabledict.values()returnsaniterableenumerate()returns......
  • 在python中使用变量引用Panda列名称
    我正在尝试编写一个函数来简化我的代码,因此我传递了包含列名称的变量。它适用于Django应用程序,调试器不会对我的错误所在提供任何反馈,只是“内部服务器错误”。我的代码工作正常,不是作为函数编写的:df_trips['trip_time_prep_starts']=df_trips["trip_time_prep_sta......
  • 如何在 Pyqt5 Python 中实现 QTableWidget 列过滤器中的搜索栏?
    我使用pyqt5创建了一个QTableWidget,并成功地在表格小部件的每一列中添加了过滤选项,并使用堆栈溢出上可用的答案之一。过滤器按预期工作,但我想在顶部的过滤器中添加搜索栏来搜索值。在我的python脚本中,过滤器中可能有大约50多个唯一值。因此,如果有一种方法可以在过滤器......
  • Python - Abstract Base classes
    Wehaveseenthatifwehavetodefineagroupofclassesthathavesimilarfeaturesandshowcommonbehavior,wecandefineabaseclassandtheninherittheclassesfromit.Inthederivedclasses,wehavethechoicetoeitherusethebaseclassversion......
  • python3 unittest+BeautifulReport单个进程输出多个测试报告
    最近一个项目中需要由于输出的案例内容非常多(上万条),导致BeautifulReport输出的报告内容非常大(几百兆)。浏览器无法正常处理这么大的测试报告,就算打开了,也不方便阅读和处理,因此需要将报告分成多个输出。经修改代码,发现单个进程内输出多个测试报告出现问题:第一个测试报告能正常数据......
  • 具有自引用的类装饰器的 Python 类型提示
    我的最终目标是编写一个系统来轻松记录函数调用(特别是类方法)。我首先编写一个带有包装方法的类Loggable,该方法允许我装饰子类方法并记录它们的调用|||现在我可以编写子类并记录它们的调用:Param=ParamSpec("Param")RetType=TypeVar("RetType")CountType=......
  • 如何在for循环中使用curve_fit函数在python中一次性创建多个回归?
    简而言之,我有两个矩阵,一个称为t,另一个称为y。每个都有7列。假设它们被称为a、b、c、d、e、f和g。我想要的是从a对a、b对b、...、g对g这两个矩阵进行回归。我已经设法使我的算法使用curve_fit对一列进行回归一次。但我真正希望的是它能够一次性完成7个回归......
  • 激活虚拟环境会让python消失?
    VisualStudioCode终端的屏幕截图如屏幕截图所示,python在Powershell中运行得很好。然后我在E:\DrewFTCAPI\ftcapivenv激活虚拟环境,然后python就消失了。不仅没有消失,它不运行任何东西,也不产生任何输出。我至少预计会出现某种类型的"python"i......
  • Python 3.6 中的相互递归类型,使用命名元组语法
    我正在尝试实现图的节点和边。这是我的代码:fromtypingimportNamedTuple,ListclassNode(NamedTuple):name:stredges:List[Edge]classEdge(NamedTuple):src:Nodedest:Node这会引发错误,因为创建Edge时未定义Node类型。......