输入带有比较运算符的字符串,并在数组索引上执行比较

Posted

技术标签:

【中文标题】输入带有比较运算符的字符串,并在数组索引上执行比较【英文标题】:Input a string with a comparison operator and perform the comparison on an array index 【发布时间】:2021-07-01 04:41:12 【问题描述】:

到目前为止,这是我的代码:

# Function to search for possible matches for words: and chapters:
def intSearch(term, row, index):
    """
    Index of 6: Word search
    Index of 7: Chapter search
    """
    rowValue = row[index]
    if True:
        return True
    return False

“如果为真”只是暂时的。所以我想要的是术语输入是一个比较运算符,然后是一个整数,例如'> = 334'。然后可以将这个字符串分解并与我可以使用 row[index] 的行的特定索引进行比较。如果这个比较是正确的,它将返回 True,如果不正确,它将返回 False。比较应该适用于基本上所有的运算符,包括:==、!=、>、= 和范围。

所以比较基本上看起来像:

if row[index] >= term:

其中 row[index] 是数组整数,>= 是比较运算符,term 是要比较的数字。

我可以使用很多 if 和 else 语句,虽然我不确定这会有多有效。

希望我说清楚了。谢谢!

【问题讨论】:

如果你想管理多个条件,那么 if-elif-else 是正确的选择。与其他语言不同,Python 不支持更适合复杂的基于案例的执行的 switch-case 语句。 只是不确定如果我必须为每个操作员进行测试会有多效率 不要过早地优化你的代码,先让它工作,测试它,然后如果它很慢找出问题。有一些慢的东西总比没有代码好:) 所以该函数只是将一个项目与给定的术语进行比较?你可以做return row[index] >= term。对不起,如果我理解错了,那是你想要做的吗? 【参考方案1】:

对于这类问题有两个非常有用的概念,标准operator 库和标准dictionary

例子:

import operator as op

op_map = 
    "==": op.eq,
    "!=": op.ne,
    ">": op.gt,
    "<": op.lt,
    "<=": op.le,
    ">=": op.ge,


x = 10
y = 0

for op_str in op_map:
    print(f"x op_str y: op_map[op_str](x, y)")

输出:

10 == 0: False
10 != 0: True
10 > 0: True
10 < 0: False
10 <= 0: False
10 >= 0: True

【讨论】:

以上是关于输入带有比较运算符的字符串,并在数组索引上执行比较的主要内容,如果未能解决你的问题,请参考以下文章

比较用户登录输入的数组中的用户注册信息

MySQL 在索引中使用自定义字符串比较运算符

array_merge和array_values重排索引数组性能比较

架构比较 SET QUOTED_IDENTIFIER for View 与索引

将字符串值与 PHP/Laravel 中的字符串数组进行比较?

并行执行DynamoDB查询(全局二级索引的BatchGetItems)