我有一个字符串列表如下
list1 = [' ', '(', '13', 'temp', '1.0E-02', 'given', '42.35', '=', '5']
如何获得前n个浮点值?例如,下面的代码获取float的最后一个值。如何修改它以获得前n个值
list1 = [' ', '(', '13', 'temp', '1.0E-02', 'given', '42.35', '=', '5']
for val in list1:
try:
float1 = float(val)
except ValueError:
continue
更新到
n=4
,因为人们似乎被输出所抛弃。你知道吗下面是一种仅打印前n个浮点元素的map/filter方法:
印刷品:
编辑
按照评论中的要求详细阐述一下:
^{} 接受一个函数和一个iterable,并将该函数应用于iterable中的每个元素,在本例中,我们试图将
get_float
映射到每个元素x
。你知道吗现在,如果
x
是一个float,get_float
成功,并将x转换为一个float值。如果x不能被转换成float,函数将抛出一个ValueError
,我们实际上不需要对它做任何事情-所以我们传递,因为没有return语句,我们最终返回None
。你知道吗然而,在我们的
map
的初始传递之后,我们作为所有ValueError
的结果得到的None
最终会出现在映射的输出中,因此如果您打印list(map(get_float, list1))
,将会看到这样的内容:[None, None, 13.0, None, 0.01, None, 42.35, None, 5.0]
,以及所有那些额外的None
^{} 接受一个函数,如果您想保留一个元素,则返回
True
;如果您想去掉它,则返回False
,然后返回一个iterable,结果是另一个iterable只包含您想保留的元素。filter(None, iterable)
只使用默认筛选器,其中bool(x)
计算结果为False
的所有内容都将被丢弃。因此,在应用过滤器之后,我们只会得到filter
iterable中的float,我们将其转换为list
,并对结果([:n]
)进行切片,以仅保留前n个元素。你知道吗方案1
建立在Tgsmith61591的解决方案之上:只需获取一个布尔数组作为列表的索引。你知道吗
将函数矢量化,使其接受整个向量作为输入,然后只需使用应用于列表的函数作为索引即可获得所需的元素。你知道吗
方案2
将整个数组转换为浮点数和占位符值,然后过滤掉占位符。你知道吗
map
将函数floatify
应用于list1
中的每个元素。它为无法转换的值生成一个浮点数组和np.nan
。np.isnan()
函数给出了一个布尔数组,对于np.nan
值是真的。然后将此布尔数组的逆数组(因此只有非nan的值)用作生成新数组的索引。你知道吗方案3
如果你不关心速度(如果你的数组不是那么长)并且想要一个快速而肮脏的解决方案,你可以坚持使用一个for循环来附加:
输出
注意,我稍微更改了输入并添加了一个
0
值,这个值很难过滤。以上所有方法都提供以下输出:
只需获取
floats
数组的第一个n
值即可获得第一个n
值:它给出:
这是一种混乱。。。但是,如果你想理解的话:
然后要得到第一个
n
。。。你知道吗相关问题 更多 >
编程相关推荐