如何将Python中的以下程序更改为功能样式?
from itertools import permutations
for p in permutations(range(1, int(input()) + 1)):
print(*p, sep='')
我知道地图,但是
map(lambda p: print(*p, sep=''), permutations(range(1, int(input()) + 1)))
不会产生预期的输出。
我想知道是否有可能在没有'重新定义'for循环的情况下这样做。
答案 0 :(得分:1)
map
不应用于副作用功能。
print
函数正在返回None
,因此您正在构建一个列表(或python3中的生成器),该列表将包含与您正在迭代的集合中的项目一样多的Nones,完全无用。
您可以使用while
循环:
def printFrom(col):
i = iter(col)
while True:
try:
print(next(i))
except StopIteration:
break
作为功能样式,您可以使用recursion
:
def printFrom(col):
it = iter(col)
def printit(i):
try:
print(next(i))
printit(i)
except StopIteration:
return
printit(it)
或者只是这个:
print(" ".join(map(lambda x: " ".join(map(str, x)),permutations(range(1, 10)))))
最后一个解决方案的想法是,您只需一次调用即可在打印之前构建实际的最终字符串。