我试图在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中有一个简单的方法吗?任何帮助将不胜感激!
答案 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]))
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]))