【问题标题】:how to avoid printing None list in the output of python program如何避免在 python 程序的输出中打印 None 列表
【发布时间】:2026-01-08 23:10:01
【问题描述】:

我最近开始学习 python,我正在尝试按字典排序顺序打印字符串 S 的大小 k 的所有可能排列。

我得到了正确的结果,但在输出中,我的程序也在打印一个无类型列表,即:[None, None]

from itertools import permutations
S,k = input().split()
[print(x) for x in sorted(map("".join,permutations(S,int(k))))]

输入电流输出:hs 2
hs
sh
[无,无]

输入的预期输出:hs 2
hs

【问题讨论】:

  • 这就是为什么建议副作用使用列表推导。您实际上并不需要列表,但希望代码执行某些操作,例如 print
  • print(..) 返回None

标签: python list


【解决方案1】:

print(..) 是一个写入标准输出通道的函数,返回 None。所以你在这里将Nones 添加到你的列表中。

您可以使用以下方法创建值列表:

sorted(map("".join,permutations(S,int(k)))

虽然对于一个大的k,这最终会耗尽内存。您可以简单地提前对S进行排序,这样效率更高,您可以在此处以可迭代方式使用permutations,从而减少内存量,例如:

for p in permutations(sorted(S),int(k)):
    print(''.join(p))

因此,算法将采用 O(n log n + nk),而不是 O(nk ×k×log n)。内存占用将是 O(n) 而不是 O(nk)n 字符数在字符串中,k 是排列中的项目数。

【讨论】:

  • 我可以使用列表理解来做同样的事情吗
  • @San: 如果你运行程序,[None, None] 不会被打印出来。 shell 将简单地打印它。但是使用列表理解将是一个可怕的想法,因为这会再次生成 O(n^k) None 项目的列表,从而导致内存爆炸。遗憾的是,列表理解不是 monad 的语法糖,就像一些函数式编程语言 :)