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. 该类可能通过比较两个“多项式”系数来定义相等检查。由于字符串“forward”没有 coeff 属性,因此会出现错误。

一个简单的解决方法是将 if 语句放在 try/except 块中:

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

另一件事——通常在做:

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

不是最好的成语。一个更好的成语是:

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

如果您只想检查“转发”是否在列表中,您也可以使用

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