使用Python包含打印语句的一个内衬产生None的列表

时间:2019-02-06 08:44:35

标签: python list

ts_file = "ts_nfl_04_red_zone_conversion"

ts_title = [print(i + ' ', end="") for i in ts_file[7:].upper().split("_")]

结果:

04 RED ZONE CONVERSION [None, None, None, None]

是什么产生了这个None语句列表,如何避免呢? 非常感谢。

6 个答案:

答案 0 :(得分:1)

您可以改为reset_index拆分字符串所产生的元素:

ts_title = (' ').join(ts_file[7:].upper().split("_"))
# '04 RED ZONE CONVERSION'

答案 1 :(得分:1)

您可以改用replace

>>> ts_file[7:].upper().replace("_", " ")

答案 2 :(得分:0)

这里实际上并不需要列表理解,因为print语句返回None类型。您可以像这样遍历字符串:

for i in ts_file[7:].upper().split("_"): print(i + " ", end="")

答案 3 :(得分:0)

如评论中所述,print返回一个None,并且不打算在列表理解中使用。

如果您希望单线取得期望的结果,则可以执行类似的操作

print(' '.join(ts_file[7:].upper().split("_")))

答案 4 :(得分:0)

您创建了None列表,因为您创建了一个。这就是列表理解的目的:创建列表。但是,除非您处于交互式解释器中并且已将表达式返回到顶层,否则不会自动打印表达式。这意味着,将其保存到变量后,您实际上不会看到此输出。

无论如何,在这种情况下,您应该使用常规循环,如下所示:

ts_file = "ts_nfl_04_red_zone_conversion"

for i in ts_file[7:].upper().split("_"):
    print(i + ' ', end="")

但是,您当然仍然可以使用理解并通过稍微重新排列将其创建一个空列表,将其保存到变量中,这样它就不会自动在交互式解释器中打印出来:

ts_file = "ts_nfl_04_red_zone_conversion"

ts_title = [None for i in ts_file[7:].upper().split("_") if print(i + ' ', end="")]

答案 5 :(得分:0)

正如其他人所述,print()不返回任何内容。因此,不打印任何内容。如果您想知道为什么要正确打印元素,然后再打印4个None,则是由于函数的工作原理。

调用一个函数,一旦执行了其中的每个语句,就返回一个值,但前提是该函数返回某些值。

在您的情况下,print(i + ...)在i上调用了print函数,执行了print,这意味着它将i打印到了控制台,然后返回了它的值,即None,因为print()会执行n'不退还任何东西。

解决方案可以使用.join()方法或replace()方法:

a = ts_file[7:].upper().replace("_", " ")
print(a)

a = (' ').join(ts_file[7:].upper().split("_"))
print(a)

输出:

04 RED ZONE CONVERSION

如果您不关心ts_title中存储的内容,还可以做另一件事: 在为ts_title分配列表理解后:

ts_title = [print(i + ' ', end="") for i in ts_file[7:].upper().split("_")]

如果您运行脚本,您将在屏幕上获得预期的输出,就像我在答案开头所解释的那样。