繁体   English   中英

Python似乎自动将列表转换为字符串,之后.append()和.pop()不可用

[英]Python seems to automatically convert a list to a string, after which .append() and .pop() are unusable

如果很重要,我正在使用Python 3.6和PyCharm。 我对Python编程(尤其是使用文件)也很陌生,如果我遗漏了一些明显的东西,请抱歉。

我正在尝试编写一个脚本,将外观序列中的前20个项目写入文件,每个项目都放在单独的行上。 该脚本在前4行中运行良好,但是此后会引发异常。

LINES = 20
with open("sequence.txt", "r+") as finalOutput:
    finalOutput.truncate(0)
    finalOutput.write("1")
    for i in range(LINES-1):
        finalOutput.seek(0)
        prevLine = finalOutput.readlines()[-1]
        newLine = ""
        block = []
        for c in prevLine:
            if c == "\n":
                break
            else:
                block.append(c)
                if block[-1] != block[0]:
                    newLine += str(len(block[:-1]))
                    newLine += str(block[0])
                    block = block.pop()
        if len(block) != 0:
            newLine += str(len(block))
            newLine += str(block[0])
        finalOutput.write("\n" + newLine)

将“ 1211”写入文件后,出现以下错误:

Traceback (most recent call last):
  File "C:/Users/ViAik/PycharmProjects/1_11_21_1211_sequence/main.py", line 
14, in <module>
    block.append(c)
AttributeError: 'str' object has no attribute 'append'

这意味着该block是一个字符串,即使它以列表(?)开头。 最让我感到困惑的是前4行工作正常。

我什至不知道如何在这里提出我的实际问题,因为我不知道实际发生了什么。 我想弄清楚这是我的问题,希望我可以以不涉及故意将block用作字符串的方式修复此代码。 有什么帮助吗? 提前致谢。

block = block.pop()

这使得block成为它自己的最后一个元素,它是一个字符串。 我不确定您希望在这里发生什么。

例如

block = ['hello', 'world']
block = block.pop()
print(block)  # --> world

Python处理引用对象的概念。 变量名称是对实际对象的引用。 当名称在方程式的右侧时,它所引用的对象将自动查找并在方程式中使用。 所以当你写:

 block = [] # the name block is a reference to a list

但是,当您再次引用名称块到新对象时,它将指向它分配的最后一个引用对象。

block = block.pop() # the name block is a reference to string object.

因此,当您尝试在块中附加元素时,会出现错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM