2011-11-02 11 views
68

ストリップすべての要素

['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n'] 

、その後、ストリップの機能を使用して、にそれを回す:

['this', 'is', 'a', 'list', 'of', 'words'] 

I私が書いたものを働くだろうと思ったが、私はというエラーを取得しておいてください。ここでは

"'list' object has no attribute 'strip'"

は、私が試したコードです:

strip_list = [] 
for lengths in range(1,20): 
    strip_list.append(0) #longest word in the text file is 20 characters long 
for a in lines: 
    strip_list.append(lines[a].strip()) 
+1

0を 'strip_list'に19回追加してから、削除した行を追加する理由を説明してください。そのコードはそれについて非常に悪い匂いがあります。また、ファイルからそのものを入手した場合は、大きなリストを作成して別の大きなリストに入れておくのは良い考えではありません。また、2、あなたのコードは、最長の単語/行の長さを知ることに依存すべきではありません。少しステップバック - あなたは何を達成しようとしていますか? 'strip_list'で何をしますか? –

+0

関連[\ nをリスト要素から削除する方法](http:// stackoverflow。com/q/3849509) –

答えて

128
>>> my_list = ['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n'] 
>>> map(str.strip, my_list) 
['this', 'is', 'a', 'list', 'of', 'words'] 
+0

私はちょうどstripped_list = map(str.strip、my_list) とし、この新しいリストを印刷するためにstripped_listを印刷できますか? –

+0

@GeorgeBurrowsはい。 – agf

+16

Python 2を使用している場合、 'str.strip'は、リストにユニコード文字列が含まれていないことが確実である場合にのみ動作します。 8ビットとユニコードの両方の文字列を含むことができる場合は、上記のように 'lambda s:s.strip()'を使うか、 'strings'モジュールからインポートできる' strip'関数を使います。 – Cito

79

リストの内包? [x.strip() for x in lst]

31

あなたはlists comprehensionsを使用することができます。

strip_list = [item.strip() for item in lines] 

またはmap機能:

# with a lambda 
strip_list = map(lambda it: it.strip(), lines) 

# without a lambda 
strip_list = map(str.strip, lines) 
+3

2番目のバージョンのラムダは過剰です。 –

+1

同じアプローチを使用して、リストの先頭にある値が「0」であれば何でも行うことができます。私は実際にあなたが同じ結果リストにそれらを入れることによって達成しようとしていることを想像することはできません... –

+1

Python 3では、 "ラムダなし"の3番目の形式は 'strip_list = list(map(str .strip、lines)) 'map()はマップイテレータを返します。 https://docs.python.org/3/library/functions.html#map – Devy

7

他のすべてがPEP 202

[w.strip() for w in ['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n']] 
+0

名前を 'list'から' map'に変更するつもりでした:) – Casey

2

で定義されている。これは、リストの内包表記を使用して行うことができます答え、主にリストの理解については、素晴らしいです。しかし、単にあなたのエラーを説明します

strip_list = [] 
for lengths in range(1,20): 
    strip_list.append(0) #longest word in the text file is 20 characters long 
for a in lines: 
    strip_list.append(lines[a].strip()) 

aはあなたのリストのメンバーではなく、インデックスです。

[...] 
for a in lines: 
    strip_list.append(a.strip()) 

もう一つの重要なコメント:あなたは空のリストをこのように作成することができます:あなたが書くことができることはこれです

strip_list = [0] * 20 

しかし.appendはあなたのリストにものを追加して、これは、それほど有用ではありません。あなたの場合は、削除された文字列を追加するときにアイテムごとに項目を作成するので、defaut値を持つリストを作成すると便利ではありません。

だからあなたのコードは次のようにする必要があります:

strip_list = [] 
for a in lines: 
    strip_list.append(a.strip()) 

しかし、これはまったく同じことであると確認のために、最高の一つは、このいずれかになります場合は

stripped = [line.strip() for line in lines] 

あなたが何かを持っています.stripよりも複雑で、これを関数に入れて同じようにします。それはリストを扱う最も読みやすい方法です。

関連する問題