3

Pythonのリストに問題があります。

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

x = [scipy.poly1d([ 1.,  0.,  0.]),2,3,4,5,'foward']
for i in range (len(x)) :
    if x [i] == 'foward':
        print 'check!'

実行すると、次のように表示されます。

return NX.alltrue(self.coeffs == other.coeffs)AttributeError:'str'オブジェクトに属性'coeffs'がありません

しかし、xを:に変更すると

  x = [1,2,3,4,5,'foward']

プログラムは問題なく実行されます。

誰かが私に理由を説明できる人はいますか?そして私は何をすべきですか?実際、上記のような属性エラーを返すデータ(x)の修正リストがあり、その形式とその内容を変更したくありません。

4

3 に答える 3

5
if isinstance(x[i], basestring) and x[i] == 'forward'

または迅速で汚い:

if str(x[i]) == 'forward'

また、ループを使用for .. inしてリストを反復処理する必要があります。

for elem in x:
    if isinstance(elem, basestring) and elem == 'forward':
        print 'Check'

必要な場合iも:

for i, elem in enumerate(x):
于 2012-05-18T14:26:11.547 に答える
1

私はあなたに問題を与えている同等性チェックがにあると推測していますscipy.poly1d。このクラスは、おそらく2つの「多項式」係数を比較することによって等式チェックを定義します。文字列「forward」にはcoeff属性がないため、エラーが発生します。

簡単な修正は、ifステートメントをtry/exceptブロックに配置することです。

try:
   if x[i] == 'forward':
      print 'check'
except AttributeError:
   pass

もう1つのこと-一般的に行うこと:

for i in range(len(obj)): 
    x=obj[i]
    ...

使用するのに最適なイディオムではありません。より良いイディオムは次のとおりです。

for i,x in enumerate(obj):
    ...
于 2012-05-18T14:23:19.917 に答える
0

'foward'がリストにあるかどうかを確認したいだけの場合は、次を使用することもできます。

if 'foward' in [i for i in x if isinstance(i, basestring)]:
    print 'check'
于 2012-05-18T15:35:18.277 に答える