0

例えば:

Myfunction("1,2,3\n4,5,6")

出力は次のようになります。[["1","2","3"],["4","5","6"]]

4

4 に答える 4

7

リスト内包表記を使用します。

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()。これは と同じように機能しますが改行文字の組み合わせで.split()データを分割します。最後の行も少し賢く処理します。\r\n\r\n

このデータがファイルからのものである場合は、適切なツールを使用することを検討してください。このcsvモジュールは、カンマ区切りのデータを引用する複雑さをはるかにうまく処理できます。

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
于 2013-06-22T10:20:27.747 に答える
2

str.splitandでリスト内包表記を使用します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.
于 2013-06-22T10:22:54.103 に答える
2

入力が長さ N の M 行の場合、O(M*N) の代わりに O(N) スペースを取るジェネレーターを次に示します。

def myfunction(text):
    from StringIO import StringIO
    for line in StringIO(text):
        yield line.rstrip().split(',')

メモリ消費を減らすために、具体的なリストではなく反復子を返します。結果を for ループなどで使用できます。本当に出力がリストとして必要な場合は、それをlist()コンストラクターに渡すだけです。

于 2013-06-22T10:30:34.467 に答える
1

ファイルから何かを読み取るためにこの関数を書いているなら、csvモジュールはあなたの友達です:

import csv

with open('somefile.txt') as f:
   reader = csv.reader(f, delimiter=',')
   lines = list(reader)
于 2013-06-22T10:22:05.883 に答える