如何通过 while 循环以 python 方式避免此代码重复?
How to pythonically avoid this code duplication with a while loop?
我想找到尚不存在的第一个文件名 myfile????.txt
(????
是一个数字)。这有效:
import os
i = 0
f = 'myfile%04i.txt' % i
while os.path.exists(f):
i += 1
f = 'myfile%04i.txt' % i
但我不喜欢 f = ...
的代码重复。
是否有 pythonic 方法来避免此 while
循环中的代码重复?
注意:我已经发布了一个半满意的解决方案,使用 do/while
习语,如 Emulate a do-while loop in Python? 的主要答案中所述,但我仍然想知道是否有更好的方法来解决这个问题案例(因此,这不是这个问题的骗局)。
删除 f
变量。
import os
i = 0
while os.path.exists('myfile%04i.txt' % i):
i += 1
我在写下问题的结尾时几乎找到了答案。经过一些修改后,它可以工作:
import os
i = 0
while True:
f = 'myfile%04i.txt' % i
if not os.path.exists(f):
break
i += 1
print f
我仍然想知道是否有更 pythonic 的方式,也许使用迭代器、生成器、next(...)
或类似的东西。
是不是太简单了?
import os
f = 'myfile0000.txt'
while os.path.exists(f):
i += 1
f = 'myfile%04i.txt' % i
你可以这样做:
import os
from itertools import count
cursor = count()
it = iter((path for path in map(lambda x: 'myfile%04i.txt' % x, cursor) if not os.path.exists(path)))
first = next(it, None)
if first:
print(first)
输出
myfile0000.txt
您无需遵循此处的 while
范例,具有 next()
的嵌套生成器表达式有效:
import os
from itertools import count
f = next(f for f in ('myfile%04i.txt' % i for i in count()) if not os.path.exists(f))
print(f)
我想找到尚不存在的第一个文件名 myfile????.txt
(????
是一个数字)。这有效:
import os
i = 0
f = 'myfile%04i.txt' % i
while os.path.exists(f):
i += 1
f = 'myfile%04i.txt' % i
但我不喜欢 f = ...
的代码重复。
是否有 pythonic 方法来避免此 while
循环中的代码重复?
注意:我已经发布了一个半满意的解决方案,使用 do/while
习语,如 Emulate a do-while loop in Python? 的主要答案中所述,但我仍然想知道是否有更好的方法来解决这个问题案例(因此,这不是这个问题的骗局)。
删除 f
变量。
import os
i = 0
while os.path.exists('myfile%04i.txt' % i):
i += 1
我在写下问题的结尾时几乎找到了答案。经过一些修改后,它可以工作:
import os
i = 0
while True:
f = 'myfile%04i.txt' % i
if not os.path.exists(f):
break
i += 1
print f
我仍然想知道是否有更 pythonic 的方式,也许使用迭代器、生成器、next(...)
或类似的东西。
是不是太简单了?
import os
f = 'myfile0000.txt'
while os.path.exists(f):
i += 1
f = 'myfile%04i.txt' % i
你可以这样做:
import os
from itertools import count
cursor = count()
it = iter((path for path in map(lambda x: 'myfile%04i.txt' % x, cursor) if not os.path.exists(path)))
first = next(it, None)
if first:
print(first)
输出
myfile0000.txt
您无需遵循此处的 while
范例,具有 next()
的嵌套生成器表达式有效:
import os
from itertools import count
f = next(f for f in ('myfile%04i.txt' % i for i in count()) if not os.path.exists(f))
print(f)