使用Python包含print语句的一行程序生成None的列表

使用Python包含print语句的一行程序生成None的列表,python,list,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] 您可以替换拆分字符串所产生的元素: 04 RED ZONE C

结果:

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]
您可以替换拆分字符串所产生的元素:

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

您可以使用
replace

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

您可以使用
replace

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

列表压缩在这里并不是必需的,因为
print
语句返回
None
类型。您可以像这样循环遍历字符串:

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

列表压缩在这里并不是必需的,因为
print
语句返回
None
类型。您可以像这样循环遍历字符串:

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

如注释中所述,
print
返回一个
None
,不用于列表理解

如果你想要一条直线达到你想要的结果,你可以做如下的事情

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

如注释中所述,
print
返回一个
None
,不用于列表理解

如果你想要一条直线达到你想要的结果,你可以做如下的事情

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

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

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

print(' '.join(ts_file[7:].upper().split("_")))
但是,您当然仍然可以使用理解并创建一个空列表,方法是稍微重新排列它,将其保存到一个变量中,以便它不会自动打印在交互式解释器中:

ts_file = "ts_nfl_04_red_zone_conversion"

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

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

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

print(' '.join(ts_file[7:].upper().split("_")))
但是,您当然仍然可以使用理解并创建一个空列表,方法是稍微重新排列它,将其保存到一个变量中,以便它不会自动打印在交互式解释器中:

ts_file = "ts_nfl_04_red_zone_conversion"

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

正如其他人提到的,print()不返回任何内容。因此,没有打印。如果您想知道为什么元素正确打印,然后后跟4个
None
,这是因为函数是如何工作的

一个函数被调用,一旦内部的每一条语句都被执行,就会返回一个值,但前提是该函数返回了一些东西

在您的例子中,
print(i+…)
调用i上的print函数,print被执行,这意味着它将i打印到控制台,然后返回它的值,该值为None,因为print()不返回任何内容

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

输出:

a = (' ').join(ts_file[7:].upper().split("_"))
print(a)
你也可以做另一件事,如果你不关心存储在ts_title中的内容: 一旦您在列表中指定了ts_标题:

04 RED ZONE CONVERSION

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

正如其他人所提到的,print()不会返回任何内容。因此,没有打印。如果您想知道为什么元素正确打印,然后后跟4个
None
,这是因为函数是如何工作的

一个函数被调用,一旦内部的每一条语句都被执行,就会返回一个值,但前提是该函数返回了一些东西

在您的例子中,
print(i+…)
调用i上的print函数,print被执行,这意味着它将i打印到控制台,然后返回它的值,该值为None,因为print()不返回任何内容

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

输出:

a = (' ').join(ts_file[7:].upper().split("_"))
print(a)
你也可以做另一件事,如果你不关心存储在ts_title中的内容: 一旦您在列表中指定了ts_标题:

04 RED ZONE CONVERSION

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

print
不会返回任何内容,那么您期望得到什么呢?列表理解是从旧列表中构建新列表,如果您只想打印列表中的所有内容,那么请使用普通循环。如果您表面上将其保存到变量中,则可能重复的操作不会打印列表。
print
不会返回任何内容,那么您期望得到什么?列表理解是从旧列表中构建新列表,如果您只想打印列表中的所有内容,然后使用一个正常的循环。可能的重复将它保存到一个变量,正如你表面上所做的那样。考虑删除不必要的<代码>我在中考虑删除不必要的<代码>我在< /代码> i。你不需要构建一个列表-一个生成器工作得好/快。@谢谢你不需要建立一个列表-一个生成器工作得一样好/更快。@DillonDavis更新,谢谢你的解释!谢谢你的解释!很高兴它有帮助!如果你认为答案有用,请投票表决,这样其他人也能从中受益。我告诉你这件事是因为你有了新的捐款人标志。很高兴它有帮助!如果你认为答案有用,请投票表决,这样其他人也能从中受益。我告诉你这些是因为你有了新的出资人标志。