Python 3.x Python中空列表的基础知识

Python 3.x Python中空列表的基础知识,python-3.x,Python 3.x,我是Python的新手,我只用这种语言编程才第三天。我从Matlab转换过来,因为我即将从大学毕业,我负担不起软件的高昂成本 我试图将几个文件名添加到列表中,但失败了。以下是我的代码: import os dirname = r"D:\MyFiles" temp = os.listdir(dirname) fl = [] for fn in temp: if fn.startswith('L0116'): fl =

我是Python的新手,我只用这种语言编程才第三天。我从Matlab转换过来,因为我即将从大学毕业,我负担不起软件的高昂成本

我试图将几个文件名添加到列表中,但失败了。以下是我的代码:

    import os
    dirname = r"D:\MyFiles"
    temp = os.listdir(dirname)
    fl = []
    for fn in temp:
        if fn.startswith('L0116'):
            fl = fl.append(fn)
我不明白的是,当使用[]启动时,变量fl返回列表类型,但是我无法用上面的循环附加列表。我使用交互式提示重新检查了代码,发现类型更改为str,无法追加更多内容

我被这件事困住了,我试着在谷歌上搜索了大约一个小时,却没有任何清晰的线索知道我该如何做

有更好的办法吗?或者我做错了什么


非常感谢你的帮助

append在本地工作,因此无需将其分配给列表本身fl=fl.appendfn只需执行fl.appendfn

append在本地工作,因此无需将其分配给列表本身fl=fl.appendfn只需执行fl.appendfn

在python中,list append不会返回类型,相反,您只需像这样调用该方法:

import os
dirname = r"D:\MyFiles"
temp = os.listdir(dirname)
fl = []
for fn in temp:
    if fn.startswith('L0116'):
        fl.append(fn)

我还没有测试过这段代码,但它应该可以工作。您的逻辑每次都会重置列表。

python中的list append不会返回类型,您只需按如下方式调用该方法:

import os
dirname = r"D:\MyFiles"
temp = os.listdir(dirname)
fl = []
for fn in temp:
    if fn.startswith('L0116'):
        fl.append(fn)
我还没有测试过这段代码,但它应该可以工作。您的逻辑每次都会重置列表。

append方法会在适当的位置更改列表。您应该像这样附加fn:

fl.append(fn)
顺便说一句,不要试图分配fl.appendfn的结果,它是None

另外,不要对文件名使用rfoo字符串。它们是为正则表达式而设计的,将它们用于文件名或其他类型的字符串会让你感到痛苦。例如,您不能以反斜杠结束这样的字符串。

append方法会在适当的位置改变列表。您应该像这样附加fn:

fl.append(fn)
顺便说一句,不要试图分配fl.appendfn的结果,它是None

另外,不要对文件名使用rfoo字符串。它们是为正则表达式而设计的,将它们用于文件名或其他类型的字符串会让你感到痛苦。例如,不能以反斜杠结束此类字符串。

列表理解:

import os
dirname = r"D:\MyFiles"
fl = [fn for fn in os.listdir(dirname) if fn.startswith('L0116')]
列表理解:

import os
dirname = r"D:\MyFiles"
fl = [fn for fn in os.listdir(dirname) if fn.startswith('L0116')]

谢谢毕竟是概念问题。但是,如果我不在前面添加r,listdir函数将读取“\”后面的字符并呈现错误。有没有办法解决这个问题?请使用D:\\MyFiles。是的,必须将每个路径名分隔符加倍是很难看的。考虑到反斜杠作为字符串转义符已经使用了几十年,将其同时用作路径名分隔符是一个非常糟糕的选择。但是,如果你一直使用微软视窗,那就是你现在所面临的困境。再次感谢你!是的!!啊。我越是编写代码,就越讨厌微软的Windows,尽管我承认Win7看起来不错。@Celada:r对于文件名来说是完全可以接受的。它不是为regexp设计的。它被设计成一个没有逃逸的字符串。谢谢!毕竟是概念问题。但是,如果我不在前面添加r,listdir函数将读取“\”后面的字符并呈现错误。有没有办法解决这个问题?请使用D:\\MyFiles。是的,必须将每个路径名分隔符加倍是很难看的。考虑到反斜杠作为字符串转义符已经使用了几十年,将其同时用作路径名分隔符是一个非常糟糕的选择。但是,如果你一直使用微软视窗,那就是你现在所面临的困境。再次感谢你!是的!!啊。我越是编写代码,就越讨厌微软的Windows,尽管我承认Win7看起来不错。@Celada:r对于文件名来说是完全可以接受的。它不是为regexp设计的。它被设计成一个没有转义符的字符串。