以惯用方式每行打印列表中任意数量的项

1 投票
3 回答
973 浏览
提问于 2025-04-16 16:06

我想从一个列表中打印数据,比如:

['0.10', '0.15', '-0.25', '0.30', '1.50', '1.70']

但是,我不想像这样只打印列表中的一个元素:

for item in list:
    print item

我想在每一行打印任意数量的项目。我能想到很多复杂的方法,之前看到一个答案是用文档中 itertools 的 grouper 这个方法。我愿意使用这个,但我觉得可能还有更好的方法。

我想要的输出示例可能是:

0.10   0.15  -0.25
0.30   1.50   1.70

或者:

0.10   0.15  -0.25   0.30
1.50   1.70

所以每行的项目数量不一定要和列表中的项目数量成正比。如果列表太短,有些行可能会少打印几个元素。

3 个回答

0

我觉得这个解决方案更清晰一些:

a = ['0.10', '0.15', '-0.25', '0.30', '1.50', '1.70']
body = []
length = 2
for b in xrange(len(a)):
    body.append(str(a[b]))
    if b % length:
        body.append("\n")
    else:
        body.append("\t")
print "".join(body)

希望这个对你有帮助 :)

附言:其实如果列表里有很多变量,使用一个打印语句的解决方案可能会更有用。

2

还有一个可能更简单的版本:

mylist = ['0.10', '0.15', '-0.25', '0.30', '1.50', '1.70']
line_items = 3

for n, item in enumerate(mylist):
    if (n+1) % line_items:
        print item,
    else:
        print item

生成的结果是:

0.10 0.15 -0.25
0.30 1.50 1.70
4

这个方法有效,看起来很简单。

for i in range(0, len(some_list), line_length):
    print( some_list[i:i+line_length] )

如果你想要在问题中看到的那种具体格式,你需要这样做。

for i in range(0, len(some_list), line_length):
    print( "  ".join( "{0:.2f}".format(x) for x in some_list[i:i+line_length] ) )

撰写回答