0

リスト要素からスペースを削除し、それらを別のリスト要素に分けたいと思っていました。たとえば、リストがある場合:

['Hello world', 'testing', 'testing two']

リストを次のようにしたいと思います。

['Hello', 'world', 'testing', 'testing', 'two']

私が抱えている問題は、ファイルから読み取っていて、既に改行文字を削除していて、スペースを削除しようとしてもうまくいかないようだということです。以下は私のコードです:

with open(fname, 'r') as f:
  words = [line.strip().strip(' ') for line in f]
print words

これは、リスト要素にまだスペースが含まれている状態で、前述の内容を出力するだけです。

誰かが私を助けることができれば、それは素晴らしいことです! ありがとう!

4

5 に答える 5

3

私はこのようなことをします:

" ".join(list).split(" ")

これにより、リストが結合されてから分割されます。もう少し効率的な方法があるかもしれませんが、この方法は簡単です。

于 2013-10-20T01:47:36.127 に答える
2

split()デフォルトでは任意の空白で分割されるため、ファイル全体を 1 つの簡単なステップで実行できます。

words =  f.read().split()

ファイル全体をメモリに読み込まないようにしたい場合f.read()

words = [word for line in f for word in line.split()]
于 2013-10-20T01:54:26.580 に答える
1

.strip文字列の先頭または末尾からのみ削除します。あなたが望むのはsplit、空白の刺し傷です:

lines_split = [line.split() for line in f]

これにより、簡単にフラット化できるネストされたリストが得られます。たとえば、この回答またはこの回答を参照してください

ここで私が好むアプローチは、単純なジェネレーターをyield一度に単語に書き込むことです。必要に応じて、後でリストに変換できます。

def get_words(filename):
    with open(filename) as fin:
        for line in fin:
            for word in line.split():
                yield word

これを で圧縮するためにできる魔法がいくつかありますが、今のところitertoolsはこれで十分です。

于 2013-10-20T01:47:41.203 に答える
0

Zonedaboneの答えが好きです。しかし、ここに別の方法があります:

>>> from itertools import chain
>>> l = ['Hello world', 'testing', 'testing two']
>>> result = list(chain.from_iterable(w.split() for w in l))
# ['Hello', 'world', 'testing', 'testing', 'two']
于 2013-10-20T01:52:32.397 に答える
0

あなたはその方法を探していsplitます。必要なことを行う最も簡単な方法は次のようになります。

words = []
with open(fname) as f:
  for line in f:
    words.extend(line.split())

少し賢い方法は次のようになります。

import itertools
with open(fname) as f:
  words = list(itertools.chain.from_iterable(l.split() for l in f))

どちらが速いかわかりません。セパレーター引数なしで呼び出された場合、内部の空白での分割と同様にsplit効果的に実行されるため、わざわざ最初に呼び出す必要はありません。stripstrip

于 2013-10-20T01:47:25.627 に答える