在python中打印子列表

时间:2015-05-05 00:44:44

标签: python list printing

我试图在python中打印一个列表列表,如下所示:

for location in latLongList:
    print ' '.join(map(str, location))

打印出来:

40.0349216312 -75.1900864349 Paved 4 0.156150432289
39.9531308619 -75.1629612614 Paved 3 0.170932927052
39.9610355788 -75.1725011285 Paved  0.17296824247
39.9788367755 -75.2123945669 Paved  0.196740550111
39.9467944475 -75.2092212039 Paved 33 0.210834020854
39.94626513 -75.2089212417 Paved 5 0.210899309368
39.9373184367 -75.2341880089 Grass  0.236747322815
39.9413269464 -75.2383849209   0.238056333485

这很好但我想排除每行中的最后一个数字(这是每个子列表中的最后一个数字)。我还希望能够允许用户指定要打印的行数。他们通过命令行输入该数字,并将其存储在名为sizeOfList的变量中。在python中有一个简单的方法吗?任何帮助将不胜感激!

5 个答案:

答案 0 :(得分:3)

您可以使用内置函数enumerate获取location中每个latLongList的索引,然后仅打印索引小于location的{​​{1}}用户期望的号码(sizeOfList)。然后,为了排除每个子列表中的最后一个项目(每个location),您可以将子列表的一部分最多但不包括最后一个项目(在索引-1处)。

for i, location in enumerate(latLongList):
    if i < sizeOfList:
        print ' '.join(map(str, location[:-1]))
@Hackaholic引入了对此方法的改进,这使得代码更简洁,可能更快(由于迭代次数越来越少location):

for location in latLongList[:sizeOfList]:
    print ' '.join(map(str, location[:-1]))

此处,只有用户所需数量(sizeOfList)的项目才会从latLongList中获取。不再需要enumerate

答案 1 :(得分:1)

你可以这样做:

# this import needs to be first
from __future__ import print_function

for location in latLongList[:sizeOfList]:
    print(*location[:-1])

__future__导入使print成为一个函数,因此您可以执行print(*foo)。这就像print(foo[0], foo[1], ...)

答案 2 :(得分:0)

最好这样尝试:

for location in latLongList[:sizeOfList]:
    print ' '.join(map(str, location[:-1]))

答案 3 :(得分:0)

这应解决这两个问题:

print '\n'.join('{} {} {}'.format(*location) for location in latLongList[:sizeOfList])

这个解决方案非常Pythonic。使用str.format()消除了使用map(str, )将所有内容转换为字符串的需要(str.format()会自动为您执行此操作)。此外,无需为每个位置切片子列表以消除最后一个元素,因为str.join()会自动忽略列表的其余部分。最后,它将打印的调用次数从sizeOfList次减少到一次。并且str.join()操作很快,因为它正在加入迭代器而不是列表。

享受!

答案 4 :(得分:0)

首先,要打印除最后一个元素之外的所有内容,您可以将列表切片以包含除最后一个元素之外的所有内容:location[:-1]。 (切片在Using Python as a Calculator的教程中进行了解释;有关完整详细信息,请参阅库参考中的Sequence Types。)

然后,要在一定数量的行后停止,您可以对行列表进行切片:latLongList[:sizeOfList]

所以:

for location in latLongList[:sizeOfList]:
    print ' '.join(map(str, location[:-1]))

如果列表实际上不是一个列表,而是一个迭代器(或者如果你正在编写需要同时使用它们的通用代码),或者如果你担心内存浪费在复制部分列表(比如因为你想要前2亿行),你可以使用islice来解决这两个问题:

from itertools import islice
for location in islice(latLongList, sizeOfList):
    print ' '.join(map(str, location[:-1]))