如何使用列表推导式在一行中打印一个整数列表?

3

我需要在一行中打印出列表中的整数,而且我必须只使用一行代码来完成,使用列表推导式(假设我们已经拥有该列表)

我尝试过这个:

[j for j in [4,10,22,34]]

但在这种情况下,输出结果是一个列表,但我需要的只是数字。

我已经尝试了以下方法:

[print(j,end=' ') for j in [4,10,22,34]]

但是有时候会打印出一个列表,末尾还带有“None”值,例如:

4 10 22 34 [None, None, None, None]

-----------

我想要打印的列表是:

[4,10,22,34]

输出必须完全一致:

4 10 22 34

这里的重点是不使用列表推导式。一行代码并不总是方便的。 - Austin
不鼓励在列表推导式中使用“副作用”,在这种情况下是显示值的副作用。print(在Py3中)是一个返回None的函数。你已经有了正确的打印方式;只需在常规for循环中使用它即可。 - hpaulj
这个 [print(j,end=' ') for j in [4,10,22,34]] 应该在Python 3.6中是正确的。你使用的是哪个Python版本? - Cao Minh Vu
@CaoMinhVu 我使用3.7版本。 - Ebrahim Pichka
@hpaulj 它本来应该在某种程度上帮助使用列表理解的 :/ - Ebrahim Pichka
显示剩余3条评论
4个回答

7
如果你只想将列表打印为单行:
print(*(i for i in [4,10,22,34]))

3
那里完全不需要生成器表达式。 只需使用 print(*[4,10,22,34]) 即可。 - Blckknght
@Blckknght 我认为这是为了考虑到必须使用列表推导的奇怪要求。 - absolutelydevastated
@Blckknght你说得对,但我想表明print语句可以用于打印生成器。 - Masoud Rahimi

4
我理解其他用户所说的内容,不过你可能想要在列表推导式之外先格式化输出,而非在其中打印信息。
print(' '.join([str(i) for i in int_list]))

在某种程度上,这也满足了您的要求。

1
我建议采用这种方法——如果到目前为止的指令包括这个字符串join方法。如果这是一个任务,它应该有一个目的,巩固他们刚学到的东西。 - hpaulj
由于您实际上正在创建一个新的字符串列表,一个不错的替代方法是:print(' '.join(map(str, int_list))) - Tomerikoo
@Tomerikoo 在我记起列表解析是必要的之前,我也考虑过这个方法,否则我们可以直接使用 print(*int_list) - absolutelydevastated
使用生成器表达式或类似于map的迭代器作为str.join的参数与列表推导相比并没有节省任何东西,因为str.join的实现中的第一步是将参数转换为列表(如果它不是列表或元组)。这是因为代码需要多次迭代值,所以一次性的迭代器是没有用的。 - Blckknght

4
使用*print来获取您的结果:
print(*[4,10,22,34])

输出

4 10 22 34

1

虽然上述答案更快、更直观,应该更受欢迎,但我想要补充一些不同的东西,因为为什么不呢!

print(str([4, 10, 22, 34]).strip('[]').replace(',',''))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接