4

私のコードでは何が間違っていますが、期待した結果を得ることができます。

リスト内のすべての「#」を削除しようとしています。

Funds_U はデータのリストです。

In [3]: funds_U
Out[3]: 
[u'#',
 u'#',
 u'MMFU_U',
 u'#',
 u'#',
 u'AAI_U',
 u'TGI_U',
 u'JAS_U',
 u'TAG_U',
 u'#',
 u'#',
 u'AAT_U',
 u'BGR_U',
 u'BNE_U',
 u'IGE_U',
 u'#',
 u'#',
 u'DGF_U',
 u'BHC_U',
 u'FCF_U',
 u'SHK_U',
 u'VCF_U',
 u'#',
 u'JEM_U',
 u'SBR_U',
 u'TEM_U',
 u'#',
 u'#',
 u'BAB_U',
 u'BGA_U',
 u'#']

コードは次のとおりです。

In [4]: for fund_U in funds_U[:]:
   ...:     funds_U.remove(u"#")
   ...:     

エラーは次のとおりです。

ValueError                                Traceback (most recent call last)
<ipython-input-4-9aaa02e32e76> in <module>()
      1 for fund_U in funds_U[:]:
----> 2     funds_U.remove(u"#")
      3 

ValueError: list.remove(x): x not in list
4

3 に答える 3

8

ドキュメントに従って、アイテムがリストに存在しない場合remove()、エラーがスローされます。現在、コードはリスト内のすべての項目を繰り返し処理し、その数#の を削除しようとしています。すべてのアイテムが であるとは限らないため#remove()リストが s を使い果たすと、 はエラーをスローします#

次のようなリスト内包表記を試してください。

funds_U = [x for x in funds_U if x != u'#']

funds_Uこれにより、 is not内のすべての要素で構成される新しいリストが作成されu'#'ます。

于 2013-05-30T18:34:01.047 に答える
6

私はこれを行います:

new = [item for item in funds_U if item!=u'#']

これはリスト内包表記です。これは、funds_U のすべてのアイテムを調べて、そうでない場合は新しいリストに追加しますu'#'

于 2013-05-30T18:33:16.157 に答える
1

これにより元のオブジェクトが変更されるため、同じオブジェクトを指す他の変数があった場合、それらのリンクはそのまま残ります。

FUNDS_U[:] = [x for x in FUNDS_U if x != "#"]
于 2013-05-30T18:33:42.337 に答える