嵌套循环是否使文件指针前进
Does a nested loop advance the file pointer
我有以下文本文件 (file.txt):
1
2 inside
3
4 outside
5
6
当我 运行 以下代码时:
with open("file.txt") as f:
for value in f:
print("outer loop (value): ",value,end="")
if "inside" in value:
lstItem = []
lstItem.append(value)
for i,value in enumerate(f):
print("inner loop (index:value): ",i,value,end="")
lstItem.append(value)
if "outside" in value:
break
print(),print(lstItem),print()
这是我的输出:
outer loop (value): 1
outer loop (value): 2 inside
inner loop (index:value): 0 3
inner loop (index:value): 1 4 outside
['2 inside\n', '3\n', '4 outside\n']
outer loop (value): 5
outer loop (value): 6
所以我明白为什么“2 inside”没有包含在嵌套循环输出中(它位于它的外面),但我不明白的是为什么文件指针在调用时前进到下一行内循环。
我有“2 inside”作为列表的一部分(这是我想要的),但我也希望看到“2 inside”成为内部循环输出的一部分,其索引在它旁边,但是我不知道该怎么做。我什至尝试注释掉 lstItem.append(value) 语句以查看它是否会阻止文件指针前进,但这只是从列表中排除了该值,这不是我想要什么。
基本问题是您在两个地方操纵文件指针:每个 for
循环。短语 enumerate(f)
迭代文件描述符 f
。您似乎认为这将适用于已经看到的缓冲输入列表——但事实并非如此。内部循环将继续遍历文件,直到它跳出该循环。
如果您只想遍历到目前为止所看到的内容,请将输入行存储在一个列表中,然后对该列表进行遍历。
这让你感动吗?
嵌套循环使指针前进,因为您正在内部循环中迭代文件描述符。
您应该先阅读行,然后使用您的代码 f.readlines()
。然后您可以迭代嵌套循环中的行。
I have "2 inside" as part of the list (which is what I want), but I
also would like to see "2 inside" be part of the inner loop output
with its index next to it
在进入第二个循环前简单打印出来:
if "inside" in value:
lstItem = []
lstItem.append(value)
print("inner loop (index:value): ", 0, value, end="")
for i,value in enumerate(f, start=1):
print("inner loop (index:value): ",i,value,end="")
lstItem.append(value)
if "outside" in value:
break
print(),print(lstItem),print()
所以现在有两个打印,第一个的索引硬编码为 0。请注意 start=1
参数已传递 enumerate()
,因此它从 1 开始计数。
有两个指纹有点难看。您可以通过打印 after 完成构建 lstItem
:
来稍微改进一下
if "inside" in value:
lstItem = []
lstItem.append(value)
for value in f:
lstItem.append(value)
if "outside" in value:
break
print(*('inner loop (index:value): {} {}'.format(i, value)
for i, value in enumerate(lstItem)), sep='')
print(lstItem),print()
产生此输出:
outer loop (value): 1
outer loop (value): 2 inside
inner loop (index:value): 0 2 inside
inner loop (index:value): 1 3
inner loop (index:value): 2 4 outside
['2 inside\n', '3\n', '4 outside\n']
outer loop (value): 5
outer loop (value): 6
我有以下文本文件 (file.txt):
1
2 inside
3
4 outside
5
6
当我 运行 以下代码时:
with open("file.txt") as f:
for value in f:
print("outer loop (value): ",value,end="")
if "inside" in value:
lstItem = []
lstItem.append(value)
for i,value in enumerate(f):
print("inner loop (index:value): ",i,value,end="")
lstItem.append(value)
if "outside" in value:
break
print(),print(lstItem),print()
这是我的输出:
outer loop (value): 1
outer loop (value): 2 inside
inner loop (index:value): 0 3
inner loop (index:value): 1 4 outside
['2 inside\n', '3\n', '4 outside\n']
outer loop (value): 5
outer loop (value): 6
所以我明白为什么“2 inside”没有包含在嵌套循环输出中(它位于它的外面),但我不明白的是为什么文件指针在调用时前进到下一行内循环。
我有“2 inside”作为列表的一部分(这是我想要的),但我也希望看到“2 inside”成为内部循环输出的一部分,其索引在它旁边,但是我不知道该怎么做。我什至尝试注释掉 lstItem.append(value) 语句以查看它是否会阻止文件指针前进,但这只是从列表中排除了该值,这不是我想要什么。
基本问题是您在两个地方操纵文件指针:每个 for
循环。短语 enumerate(f)
迭代文件描述符 f
。您似乎认为这将适用于已经看到的缓冲输入列表——但事实并非如此。内部循环将继续遍历文件,直到它跳出该循环。
如果您只想遍历到目前为止所看到的内容,请将输入行存储在一个列表中,然后对该列表进行遍历。
这让你感动吗?
嵌套循环使指针前进,因为您正在内部循环中迭代文件描述符。
您应该先阅读行,然后使用您的代码 f.readlines()
。然后您可以迭代嵌套循环中的行。
I have "2 inside" as part of the list (which is what I want), but I also would like to see "2 inside" be part of the inner loop output with its index next to it
在进入第二个循环前简单打印出来:
if "inside" in value:
lstItem = []
lstItem.append(value)
print("inner loop (index:value): ", 0, value, end="")
for i,value in enumerate(f, start=1):
print("inner loop (index:value): ",i,value,end="")
lstItem.append(value)
if "outside" in value:
break
print(),print(lstItem),print()
所以现在有两个打印,第一个的索引硬编码为 0。请注意 start=1
参数已传递 enumerate()
,因此它从 1 开始计数。
有两个指纹有点难看。您可以通过打印 after 完成构建 lstItem
:
if "inside" in value:
lstItem = []
lstItem.append(value)
for value in f:
lstItem.append(value)
if "outside" in value:
break
print(*('inner loop (index:value): {} {}'.format(i, value)
for i, value in enumerate(lstItem)), sep='')
print(lstItem),print()
产生此输出:
outer loop (value): 1 outer loop (value): 2 inside inner loop (index:value): 0 2 inside inner loop (index:value): 1 3 inner loop (index:value): 2 4 outside ['2 inside\n', '3\n', '4 outside\n'] outer loop (value): 5 outer loop (value): 6