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语句列表,如何避免呢? 非常感谢。
答案 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("_")]
如果您运行脚本,您将在屏幕上获得预期的输出,就像我在答案开头所解释的那样。