回答
使用列表理解:
def myfunction(somestring):
return [line.split(',') for line in somestring.split('\n')]
演示:
>>> def myfunction(somestring):
... return [line.split(',') for line in somestring.split('\n')]
...
>>> myfunction("1,2,3\n4,5,6")
[['1', '2', '3'], ['4', '5', '6']]
或者,你可以使用str.splitlines()
,這像一樣工作但將分割數據任意換行符組合,即\r
,\n
或\r\n
。它處理最後一行也更聰明一些。
如果此數據來自文件,請考慮使用正確的工具;該csv
module可以處理引用上更好的逗號分隔的數據的複雜性:
import csv
with open('/your/csv/file.csv', 'rb') as inputfile:
reader = csv.reader(inputfile)
for row in reader:
# row is a list of column values
的數據不有來自一個文件,csv
可以處理任何可迭代的,包括.splitlines()
結果:
reader = csv.reader(somestring.splitlines())
for row in reader:
# row is a list of column values
如果你正在寫這個功能從文件中讀取的東西,那麼csv
模塊是你的朋友:
import csv
with open('somefile.txt') as f:
reader = csv.reader(f, delimiter=',')
lines = list(reader)
使用列表理解與str.split
和str.splitlines
:
>>> strs = "1,2,3\n4,5,6"
>>> strs.splitlines()
['1,2,3', '4,5,6']
>>> [x.split(',') for x in strs.splitlines()]
[['1', '2', '3'], ['4', '5', '6']]
幫助上str.splitlines
:
>>> print str.splitlines.__doc__
S.splitlines(keepends=False) -> list of strings
Return a list of the lines in S, breaking at line boundaries.
Line breaks are not included in the resulting list unless keepends
is given and true.
如果輸入的長度爲N M行,這裏有一個發電機需要O(N)的空間而不是O(M * N):
def myfunction(text):
from StringIO import StringIO
for line in StringIO(text):
yield line.rstrip().split(',')
它在ord中返回迭代器而不是具體列表呃減少內存消耗。你可以在for循環或類似的地方使用結果,如果你真的需要輸出爲列表,只需將它傳遞給構造函數list()
。
您可以使用生成器表達式而不是寫入函數:'(line.rstrip()。split(',')for line in StringIO(text))''。我認爲,至少在簡單的情況下,基因族對於新手來說更容易理解:「這就像列表理解,但懶惰」是直觀的; 「它就像一個函數,但產生多次而不是返回一次」更多地讓你頭腦發熱。 – abarnert
我想,但我喜歡功能,並希望人們寫更多。 :) –
那麼,你總是可以編寫一個函數,將genexp作爲迭代器返回 - 或者,如果你有3.3,則從genexp產生。就我個人而言,我喜歡代碼,它只是一個基因組序列,每個代碼都將一個迭代器轉換爲另一個迭代器(如http://www.dabeaz.com/generators-uk/GeneratorsUK.pdf上的幻燈片1-39)。 – abarnert
- 1. 如何將數組轉換爲逗號分隔的字符串?
- 2. 如何將逗號分隔的字符串轉換爲數組?
- 3. 如何將整數轉換爲逗號分隔的字符串
- 4. 如何將一個PHP數組表示爲逗號分隔的字符串?
- 5. 將逗號分隔的字符串逐行寫入文件
- 6. 如何用逗號將數字記錄爲千位分隔符?
- 7. 如何將兩個逗號分隔的值寫入一個值
- 8. 返回一個數字作爲逗號分隔字符串
- 9. 逗號分隔的字符串解析XSLT爲每個節點
- 10. 將逗號分隔字符串轉換爲多個字符串
- 11. 使用逗號分隔的字符串作爲函數參數
- 12. 如何將字符串修改爲字符值,其中字符串的每個字符用逗號分隔?
- 13. 從一個逗號分隔的字符串中將一個數組分解爲一個逗號分隔的字符串
- 14. 如何將逗號(,)分隔符作爲ios 6中的小數點分隔符?
- 15. 列中的逗號分隔值(ID)。如何獲取逗號分隔字符串中每個值的說明。
- 16. 逗號分隔的字符串爲ListProperty
- 17. 轉換一個逗號分隔字符串爲數組
- 18. 以逗號分隔的新行顯示每組3個數字
- 19. 如何將IEnumerable <string>轉換爲一個逗號分隔的字符串?
- 20. 將字符串的Arraylist轉換爲一個逗號分隔的字符串
- 21. 如何使用每個數組項的佔位符將數組轉換爲逗號分隔的字符串?
- 22. 如何將數字逗號分隔的字符串轉換爲int數組
- 23. 如何逗號分隔的多個行
- 24. 將字符串[]轉換爲逗號分隔的字符串。
- 25. 將逗號分隔的字符串轉換爲雙重字符
- 26. 逗號分隔的字符串數組
- 27. R中數字的逗號分隔符?
- 28. 如何連接整數數組爲逗號分隔字符串
- 29. 如何爲逗號分隔的節點編寫遞歸循環
- 30. 重寫分裂()逗號分隔符
你可能要考慮'splitlines'而不是'split('\ n')'。 (考慮之後,當然你可能不會切換 - 有時候你想保留'\ r',以便讓你更容易注意到當你不期待它們的時候你會被送入DOS風格的文本文件等等。 )另外,即使數據不是來自文件,我也會使用'csv',您可以將'csv.reader'提供給'StringIO',甚至是一行行列表(截至...... 2.5 ...左右)不需要像文件一樣的對象,只需要在行上迭代)。 – abarnert
@abarnert:在那裏,詳細闡述。 –