如何查找列表中的任何内容是否在字符串中并确定 "anything" 是什么?
How do I find if anything in a list is in a string and determine what that "anything" is?
我需要读取用户输入并将其解析为 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
但是,它说我没有定义比较器。我需要比较器来知道根据什么拆分字符串,因为你永远不知道比较器会出现在哪里(即:0 == 0 VS. 20124 > 6/2/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
comprehension used in any 中的变量,因此其作用域仅限于此 comprehension 的范围。
你可以替换
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:
或者您可以简单地使用正则表达式。您没有对 left 和 right 值指定任何约束,所以我假设它们可以是任何:
import re
rv = re.match("(.*)(==|!=|>)(.*)", "6 == 2")
rv.groups()
将有匹配的组,第一个具有左值,第二个具有比较,第三个具有右值。您可以微调此正则表达式以限制左右值类型。
我需要读取用户输入并将其解析为 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
但是,它说我没有定义比较器。我需要比较器来知道根据什么拆分字符串,因为你永远不知道比较器会出现在哪里(即:0 == 0 VS. 20124 > 6/2/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
comprehension used in any 中的变量,因此其作用域仅限于此 comprehension 的范围。
你可以替换
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:
或者您可以简单地使用正则表达式。您没有对 left 和 right 值指定任何约束,所以我假设它们可以是任何:
import re
rv = re.match("(.*)(==|!=|>)(.*)", "6 == 2")
rv.groups()
将有匹配的组,第一个具有左值,第二个具有比较,第三个具有右值。您可以微调此正则表达式以限制左右值类型。