簡體   English   中英

在python中打印子列表

[英]Print sublists in python

我正在嘗試在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中有一種簡單的方法嗎? 任何幫助將不勝感激!

您可以使用內置函數enumerate來獲取latLongList中每個location的索引,然后僅打印其索引小於用戶所需數量( sizeOfList )的location s。 然后,為了排除每個子列表(每個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用戶所需數量( sizeOfList )的latLongList 不再需要enumerate

您可以執行以下操作:

# 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], ...)

最好這樣嘗試:

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

這應該解決兩個問題:

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

這個解決方案是非常Pythonic的。 使用str.format()不需要通過使用map(str, )將所有內容轉換為字符串( str.format()會自動為您執行此操作)。 另外,由於str.join()自動忽略列表的其余部分,因此無需為每個位置切片子列表以消除最后一個元素。 最后,它將打印的調用次數從sizeOfList時間減少到一次。 而且str.join()操作之所以快速,是因為它要加入一個迭代器而不是列表。

請享用!

首先,要打印除最后一個元素以外的所有內容,請對列表進行切片以包括除最后一個元素以外的所有內容: location[:-1] (在使用Python作為計算器的教程中對切片進行了說明;有關完整的詳細信息,請參見庫參考中的Sequence Types 。)

然后,要在一定數量的行之后停止,可以對行列表進行切片: latLongList[:sizeOfList]

所以:

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

如果列表實際上不是列表,而是一個迭代器(或者您正在編寫需要同時使用兩者的通用代碼),或者您擔心復制列表的一部分會浪費內存(例如,因為您需要前兩億行),則可以使用islice ,它可以解決這兩個問題:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM