如何确定列表中的任何内容是否在字符串中,并确定该“任何内容”是什么?

2024-04-23 06:33:53 发布

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

我需要从用户输入中读取数据并将其解析为3部分,第一部分是行值,第二部分是条件(=,)!=,>;等),第三个是比较值。 用户输入: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

但是,它说我没有定义比较器。我需要comparator知道将字符串拆分为什么,因为您永远不知道comparator将显示在哪里(即:0==0VS.20124>;6/2/12 00:32:10)

如何设置我的3个变量!你知道吗


Tags: 用户ingtfor读取数据condition条件prompt
2条回答

变量comparator的作用域在生成器的理解范围内,不存在于它之外。与其使用^{}构造(此处丢弃了有价值的信息,即实际包含了哪个比较器),不如将其展开为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()将具有匹配的组,第一个组具有左值,第二个组具有比较,第三个组具有右值。您可以微调这个正则表达式以限制左值和右值类型。你知道吗

相关问题 更多 >