Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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 列出不是浮点或整型的项_Python_List_List Comprehension_Python 3.3 - Fatal编程技术网

Python 列出不是浮点或整型的项

Python 列出不是浮点或整型的项,python,list,list-comprehension,python-3.3,Python,List,List Comprehension,Python 3.3,我有两个项目的清单 样本输入: ['19(1,B7)', '20(1,B8)'] ['16 Hyp', '16 Hyp'] ['< 3.2', '38.3302615548213'] ['18.6086945477694', '121.561539536844'] 我编写了一些代码来查找“>”并拆分第一项,但我不确定如何让我的“新项”取代旧项: 这是我目前的代码: def is_number(s): try: float(s) return Tru

我有两个项目的清单

样本输入:

['19(1,B7)', '20(1,B8)']
['16 Hyp', '16 Hyp']
['< 3.2', '38.3302615548213']
['18.6086945477694', '121.561539536844']
我编写了一些代码来查找“>”并拆分第一项,但我不确定如何让我的“新项”取代旧项:

这是我目前的代码:

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)
此(打印(值))的输出为

['<3.2',38.3302615548213',3.2']

迭代器在这里工作良好:

def numbers_only(l):
    for item in l:
        if '> ' in item:
            item = item.split()[1]
        try:
            yield float(item)
        except ValueError:
            pass
通常,创建一个新列表要比迭代和修改旧列表容易得多

def stip_chars(lst):
    for item in lst:
        yield item.strip("> ")

new_values = [v for v in strip_chars(values) if is_number(v)]

如果要就地编辑列表而不是创建新列表,可以使用
枚举
对其进行迭代:

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))
或者,不管你如何构建你的新价值观——如果你的原始列表中有“5 6”,我不确定你想要什么

如果你想要一个新的列表,你可以做一些类似的列表理解

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.-'

这看起来更像是一种真正的列表理解方式,可以实现您想要的功能

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()
,以获取字符串形式的项目。只有在“>”或“您可以通过执行值附加新的字符并删除旧的字符时,才能使用此列表理解。删除(项)。是的,我有一些列表,但只需要确保我扔掉除小数以外的任何非数字字符,您是否也保留
-
?您打算在字符串中保留其他可能的字符吗?您应该如何处理
123.23.23
?更多说明:我认为负数不会起作用,至少不会很快起作用。我相信我正在处理的只是积极的问题。我的列表各不相同:有些是[>3.2235.4]或[235.4,<3.2],因此小于或大于可以是列表中的第一项或第二项,我只使用成对的。对不起,我如何实现这一点?打印(仅数字(值))产生:@code失败:因此调用
列表(…)
。请注意,您可以在不转换为列表的情况下对x执行
(仅限数字(值):…
,我想,如果我尝试执行打印列表(仅限数字(值)),则获取的列表对象不可用callable@codefail这听起来好像在代码的其他地方有一个名为
list
的变量,我不知道。这给了我“过滤器对象在…”。我编辑了我的代码,以便对我得到的东西有更多的了解。你键入的是完全相同的吗?以下是一个在线IDE的结果:我必须补充一点,我使用的是Python 3.3。你能在mylist中为s编写多行吗?
:为s.split()中的项编写
如果isfloat(item):
float(item)
否,否则它不会是一个列表comprehensionvalues=[>1000456]
[float(item)对于s.split()中项目的值中的s,如果isfloat(项目)]
应输出
[1000456]
?不需要“print”语句?@codefile当您执行value=[列表理解]时,输出将存储在value中。将打印([列表理解])仅用于可视化。。。
['10000', '5398.38770002321']
def parse_number(value):
    return [filter(lambda s: s in '0123456789.', v) for v in values]

print parse_number(values)
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]