无效的文本w/python范围提取

2024-04-20 13:35:46 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能给我解释一下为什么下面的返回是无效的吗?你知道吗

def solution(args):
    new_args = []
    for i in args:
        if i > (i - 1) and i > (i - 2):
            new_args.append("{}-{}".format((i - 2), i))
    return list(map(float, new_args))

确切的错误是:ValueError: invalid literal for float()

输入示例:

-6,-3,-2,-1,0,1,3,4,5,7,8,9,10,11,14,15,17,18,19,20

输出示例:

-6,-3-1,3-5,7-11,14,15,17-20

您将注意到的是一个合并列表,转换为字符串,其中任何三个连续的原始输入现在都将在列表中的一个范围内表示。你知道吗


Tags: andinformat示例列表newforreturn
1条回答
网友
1楼 · 发布于 2024-04-20 13:35:46

可能有很多关于这里发生了什么以及为什么会这样的猜测,但是。。。让我们离开尝试什么是可能的什么不是的道路。下面的代码是这个问题的补丁,没有改变solution()背后的逻辑,因此我认为这是一个可以接受的问题答案:

def solution(args):
    new_args = []
    for i in args:
        if i > (i - 1) and i > (i - 2):
            new_args.append("{}-{}".format((i - 2), i))
    return list(map(float, map(eval, new_args)))

我还没有在文档中详细检查过这一点,但是我想到int()/float()函数并不是用来接受任何不是整数/浮点数表示的字符串的。在解释内容之前,他们不应该评估表达式,这听起来很合理,对吧?将eval()放在转换的前面做了正确的工作并解决了问题。你知道吗

对于那些仍然好奇到底是什么导致了错误的人来说:

print(float('-1-1'))
   ValueError: could not convert string to float: '-1-1'
print(int('-1-1'))
   ValueError: invalid literal for int() with base 10: '-1-1'

在这种情况下,我不得不承认,我很惊讶地看到它的发生。。。因为我的直觉低声说解释器会猜出该做什么,然后对字符串再做一次操作。。。但事实并非如此

In case of ambiguity resist the temptation to guess!

是我所知的Python背后的主导思想之一。你知道吗

所以int('-1-1')在int()和float()的上下文中是不明确的。问题是两个数字之间缺少空格吗?它是一种特殊的符号吗?是加减法吗?为什么要麻烦?只要提出一个错误并拒绝它。你知道吗

相关问题 更多 >