Python 3.x 为什么Python`filter`vs similar list comprehension没有返回类似的结果?

Python 3.x 为什么Python`filter`vs similar list comprehension没有返回类似的结果?,python-3.x,list-comprehension,file-handling,Python 3.x,List Comprehension,File Handling,为什么下面两个语句不返回相同的列表 with open("test.py") as f: upChars = list(filter(lambda ch : ch.isupper(), [ch for ch in f.read()])) upChars1 = [ch1 for ch1 in f.read() if ch1.isupper()] print(f"\n1: {upChars},\n2: {upChars1}") 输

为什么下面两个语句不返回相同的列表

with open("test.py") as f:
    upChars = list(filter(lambda ch : ch.isupper(), [ch for ch in f.read()]))
    upChars1 = [ch1 for ch1 in f.read() if ch1.isupper()]
    print(f"\n1:  {upChars},\n2:  {upChars1}")
输出:

1:['T','B','S','T','T','C','T',…包含所有大写字符]

2:[]


这是因为一个文件不能读取两次。在第一次读取()之后,描述符位于文件末尾。通常,在一个文件上预处理多个内容时,将其放入列表是有意义的:

test = f.read()

然后你可以多次使用它。请尝试打印双击的结果,以查看此操作。如果您真的坚持,您可以
f.seek(0)
重置它,但这比它的价值要高。

这是因为您不能读取文件两次。在第一次读取()之后,描述符位于文件末尾。通常,在一个文件上预处理多个内容时,将其放入列表是有意义的:

test = f.read()

然后你可以多次使用它。请尝试打印双击的结果,以查看此操作。如果您真的坚持,您可以
f.seek(0)
重置它,但这比它的价值更高。

如果我在这里犯了任何小的/愚蠢的逻辑错误,请告诉我!!您不能读取该文件两次。您必须搜索到它的“开始”或重新打开它。添加“f.seek(0)”后已工作,谢谢!如果我在这里犯了任何琐碎/愚蠢的逻辑错误,请告诉我!!您不能读取该文件两次。您必须搜索到它的“开始”或重新打开它。添加“f.seek(0)”后已工作,谢谢!添加“f.seek(0)”后工作,谢谢!添加“f.seek(0)”后工作,谢谢!