我有2个项目列表。
示例输入:
['19(1,B7)', '20(1,B8)']
['16 Hyp', '16 Hyp']
['< 3.2', '38.3302615548213']
['18.6086945477694', '121.561539536844']
我需要寻找任何不是浮点数或int的东西并删除它。所以我需要上面的列表是:
['19(1,B7)', '20(1,B8)']
['16 Hyp', '16 Hyp']
['3.2', '38.3302615548213']
['18.6086945477694', '121.561539536844']
我写了一些代码来查找'&gt; '并拆分第一个项目,但我不知道如何让我的'新项目'取代旧项目:
这是我目前的代码:
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
for i in range(0,len(result_rows)):
out_row = []
for j in range(0,len(result_rows[i])-1):
values = result_rows[i][j].split('+')
for items in values:
if '> ' in items:
newItem=items.split()
for numberOnly in newItem:
if is_number(numberOnly):
values.append(numberOnly)
此输出(print(values))是
['< 3.2', '38.3302615548213', '3.2']
答案 0 :(得分:2)
这看起来更像是一种真正的列表理解方式来做你想要的......
def isfloat(string):
try:
float(string)
return True
except:
return False
[float(item) for s in mylist for item in s.split() if isfloat(item)]
#[10000.0, 5398.38770002321]
或删除float()
以将项目作为字符串。只有'&gt;'才能使用此列表理解或'&lt;'在字符串中找到。
答案 1 :(得分:0)
迭代器在这里运作良好:
def numbers_only(l):
for item in l:
if '> ' in item:
item = item.split()[1]
try:
yield float(item)
except ValueError:
pass
>>> values = ['> 10000', '5398.38770002321']
>>> list(numbers_only(values))
[10000.0, 5398.38770002321]
通常,创建新列表比迭代和修改旧列表更容易
答案 2 :(得分:0)
怎么样?
def stip_chars(lst):
for item in lst:
yield item.strip("> ")
new_values = [v for v in strip_chars(values) if is_number(v)]
答案 3 :(得分:0)
如果您想编辑列表而不是创建新列表,可以使用enumerate
迭代它:
for (list_index, item) in enumerate(values):
if '> ' in item:
values[list_index] = ' '.join(item_part for item_part in item.split() if is_number(item_part))
或者你想构建你的新价值 - 如果你有&#39; 5 6&#39;我不确定你想要什么。在原始列表中。
如果你想要一个新的列表,你可以用列表推导做类似的事情。
答案 4 :(得分:0)
values = ['> 10000', '5398.38770002321']
print [filter(lambda s: s in '0123456789.', v) for v in values]
返回值:
['10000', '5398.38770002321']
请求的字符串列表。
并使其成为一种功能:
def parse_number(value):
return [filter(lambda s: s in '0123456789.', v) for v in values]
print parse_number(values)
作为一个额外的好处,让这个接受负数就像在白名单字符串'0123456789.-'
中添加连字符一样简单