[英]What is the best way to print a list with 3 sublists to a file in 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.