Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在计算中跳过列表的sting元素?_Python_List - Fatal编程技术网

Python 如何在计算中跳过列表的sting元素?

Python 如何在计算中跳过列表的sting元素?,python,list,Python,List,我试图跳过字符串元素和浮点类型的乘法。我想避免零除错误。所以我尝试下面的代码 x =[5,2,0.2,-2,1] y=[4,3,2,1,0] z=[m/n if m and n !=0 else "Na" for m,n in zip(x,y)] print(z) a=[i*0.5 if i != str else 0 for i in z] print(a) 当我运行上述代码时。我得到了这个结果 [1.25, 0.6666666666666666, 0.1, -2.0, 'Na'] Trac

我试图跳过字符串元素和浮点类型的乘法。我想避免零除错误。所以我尝试下面的代码

x =[5,2,0.2,-2,1]
y=[4,3,2,1,0]
z=[m/n if m and n !=0 else "Na" for m,n in zip(x,y)]
print(z)
a=[i*0.5 if i != str else 0 for i in z]
print(a)
当我运行上述代码时。我得到了这个结果

[1.25, 0.6666666666666666, 0.1, -2.0, 'Na']
Traceback (most recent call last):
a=[i*0.5 if i != str else 'Na' for i in z]
TypeError: can't multiply sequence by non-int of type 'float'

Process finished with exit code 1enter code here
我想要实现的是: a=[0.625,0.3333,0.05,-1.0,'Na']

请告诉我该怎么做。感谢您的帮助。

在下面的代码中

a=[i*0.5 if i != str else 0 for i in z]
您正在用类型
str
检查
i
,您应该做的是用
str
检查
i
的类型,如下所示

type(i) != str

您的根本问题是,正如其他人指出的那样,您没有正确地执行类型检查来检查您可以使用的实例的类型:

isinstance(str, x)
如果你关心继承权
type(x)==str
或此类比较也有效,但不考虑继承。但实际上,我相信最好的解决办法是你不要混用
float
已经有一个“not-a-number”:
float('nan')
,所以只需使用它:

>>> x =[5,2,0.2,-2,1]
>>> y=[4,3,2,1,0]
>>> z=[m/n if m and n !=0 else float('nan') for m,n in zip(x,y)]
>>> z
[1.25, 0.6666666666666666, 0.1, -2.0, nan]
>>> [i*0.5 for i in z]
[0.625, 0.3333333333333333, 0.05, -1.0, nan]
那么你就不必担心类型检查了

然后,您可以稍后使用
math.isnan
进行清理:

>>> [0 if math.isnan(x) else x for x in a]
[0.625, 0.3333333333333333, 0.05, -1.0, 0]
>>> [0 if x != x else x for x in a]
[0.625, 0.3333333333333333, 0.05, -1.0, 0]
或者这个技巧,利用保证对于任何
浮点
x
x!=x
仅当x为nan时:

>>> [0 if math.isnan(x) else x for x in a]
[0.625, 0.3333333333333333, 0.05, -1.0, 0]
>>> [0 if x != x else x for x in a]
[0.625, 0.3333333333333333, 0.05, -1.0, 0]

但是
math.isnan
更为明确…

您可以使用isinstance Yea,我们也可以这样做。
[i*0.5如果不是isinstance(i,str),则s中的i为“Na”