如何查找列表中是否有任何内容在字符串中并确定该"anything"是什么?



我需要从用户输入中读取并将其分解为3个部分,第一部分是行值,第二个是条件(==,!=,> et,。),第三是比较值。用户输入:0 ==" 6/1/2014 0:00:00" ->因此,行将为0,条件将为" =",并且比较值为" 6/1/2014 0:00:00"

这是我拥有的:

    promptList = ["0 == 6/12/16 00:00:00", "1 > 47.20"]
    for prompt in promptList:
    if any(comparator in prompt for comparator in comparatorsList):
        prompt = prompt.split(comparator)
        row = prompt[0].strip()
        condition = prompt[1].strip()
        comparator = str(comparator).strip()
        print(row, comparator, condition) #test to see print statement, not needed

但是,它说我没有定义比较器。我需要比较器才能知道要分开字符串的内容,因为您永远不知道比较器会在哪里显示(:0 == 0 vs。 20124> 6/2/12/12 00:32:10)

如何设置我的3个变量!

变量comparator在发电机理解中范围内范围内范围内,并且不存在于其之外。与其使用any构造,它实际上包含了哪个比较器,它可以将其扩展到for循环中:

comparatorsList = set(["==", "!=", ">", ">=", "<=", "<"])
promptList = ["0 == 6/12/16 00:00:00", "1 > 47.20"]
for prompt in promptList:
    for comparator in comparatorsList:
        if comparator in prompt:
            prompt = prompt.split(comparator)
            row = prompt[0].strip()
            condition = prompt[1].strip()
            comparator = str(comparator).strip()
            print(row, comparator, condition) 
            break

打印:

('0', '==', '6/12/16 00:00:00')
('1', '>', '47.20')

您定义了任何使用中使用的comparator变量,因此其范围仅限于此理解的范围。

您可以替换

if any(comparator in prompt for comparator in comparatorsList):

之类的东西
comparator = next((x for x in comparatorsList if x in prompt), None)
if comparator is not None:

或者您可以简单地使用正则表达式。您没有在左右值中指定任何约束,因此我认为它们可以是任何约束:

import re
rv = re.match("(.*)(==|!=|>)(.*)", "6 == 2")

rv.groups()将具有匹配的组,第一个具有左值,第二个具有比较的组,而第三个具有正确的值。您可以对此正则调整以限制左右值类型。

相关内容

  • 没有找到相关文章

最新更新