0

我试图弄清楚当输出不是一个列表时,单行语句是如何工作的。例如,如果我想打印这些匹配 x 到 x+10 的元组,我有以下代码:

[print((i2x, xi2xx)) for i2x, xi2xx in zip(range(1,11), range(11,21))]

哪个输出

(1, 11)
(2, 12)
(3, 13)
(4, 14)
(5, 15)
(6, 16)
(7, 17)
(8, 18)
(9, 19)
(10, 20)
>>> [None, None, None, None, None, None, None, None, None, None]

现在我想我明白 print 语句(我将其视为命令)是在 for 循环中执行的,但我想知道这个带括号的列表None是否是单行 for 循环的必要输出。用于此的多行 for 循环如下所示:

for i2x, xi2xx in zip(range(1,11), range(11,21)):
    print((i2x, xi2xx))

仅输出

(1, 11)
(2, 12)
(3, 13)
(4, 14)
(5, 15)
(6, 16)
(7, 17)
(8, 18)
(9, 19)
(10, 20)

我是否遗漏了有关括号如何在 oneline 语句中工作的内容?有没有办法只输出没有列表的打印语句None

4

1 回答 1

0

问题是您的代码的产品:

[print((i2x, xi2xx)) for i2x, xi2xx in zip(range(1,11), range(11,21))]

是由列表理解创建的列表(因为您使用的是方括号)。

https://www.w3schools.com/python/python_lists_comprehension.asp

列表推导的工作方式如下:它会将您写的第一件事(在您的情况下)附加(插入到列表的末尾)print((i2x, xi2xx))到列表中,但是正如您所说,由于可以将 print 语句视为命令,因此每个时间它不会在列表中添加任何值,但没有。因此,您将获得 None 值的列表。

所以如果我们写:

lst_comp = [x for x in range(10)]

print(lst_comp)

输出将是:

>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

它与for循环不同,它是列表推导,它返回列表,我相信不能称它为单行for循环......

如果我们这样写:

lst_comp = []

for x in range(10):
    lst_comp.append(x)

print(lst_comp)
于 2022-01-18T23:44:10.163 回答