Using Python one liner containing print statement produce list of None`s
1 2 3 | ts_file ="ts_nfl_04_red_zone_conversion" ts_title = [print(i + ' ', end="") for i in ts_file[7:].upper().split("_")] |
结果:
1 | 04 RED ZONE CONVERSION [None, None, None, None] |
什么会产生这个无语句列表,以及如何避免它?多谢。
您可以使用
1 | >>> ts_file[7:].upper().replace("_","") |
您可以用
1 2 | ts_title = (' ').join(ts_file[7:].upper().split("_")) # '04 RED ZONE CONVERSION' |
正如其他人提到的,print()不返回任何内容。因此,不打印任何内容。如果您想知道为什么元素被正确打印,然后是4个
一个函数被调用,一旦内部的每个语句都被执行,就会返回一个值,但前提是该函数返回了一些东西。
在您的例子中,
对于解决方案,您可以使用.join()方法或replace()方法:
1 2 | a = ts_file[7:].upper().replace("_","") print(a) |
或
1 2 | a = (' ').join(ts_file[7:].upper().split("_")) print(a) |
输出:
1 | 04 RED ZONE CONVERSION |
你也可以做另一件事,如果你不关心存储在标题中的内容:一旦你指定了你的列表理解的标题:
1 | ts_title = [print(i + ' ', end="") for i in ts_file[7:].upper().split("_")] |
如果运行脚本,您将在屏幕上得到预期的输出,正如我在回答开始时解释的那样。
您生成了一个
无论如何,在这种情况下,应该使用一个正则循环,如下所示:
1 2 3 4 | ts_file ="ts_nfl_04_red_zone_conversion" for i in ts_file[7:].upper().split("_"): print(i + ' ', end="") |
但是,当然,您仍然可以使用理解并通过稍微重新排列列表来创建空列表,将其保存到变量中,这样它就不会自动打印在交互式解释器中:
1 2 3 | ts_file ="ts_nfl_04_red_zone_conversion" ts_title = [None for i in ts_file[7:].upper().split("_") if print(i + ' ', end="")] |
如注释所述,
如果你想要一条直线来达到你想要的结果,你可以做一些类似的事情
1 | print(' '.join(ts_file[7:].upper().split("_"))) |
这里不需要进行列表比较,因为
1 | for i in ts_file[7:].upper().split("_"): print(i +"", end="") |