查找列表中的项目

时间:2012-04-14 00:36:17

标签: python list parsing

所以我试图在python的列表中找到一个项目。这是我的功能:

def operator(input):
    operatorlist = ['+', '-', '*', '/', '^', 'sin', 'cos']

    for i in operatorlist:
        if input is operatorlist[i]:
            return True

我的代码破了,我无法弄清楚为什么......任何想法?

我改变了我的代码:

def operator(input):
    if input is '+' or input is '-' or input is '*' or input is '/' or input is '^' or input is 'sin' or input is 'cos':
    return True

因为我被告知,基本上,风格上是愚蠢的,以这种方式写。

6 个答案:

答案 0 :(得分:11)

一行:

return input in operatorlist

这里不需要做条件,in运算符已经返回一个布尔值。

答案 1 :(得分:3)

这里有一些事情:

  • 函数定义行需要以冒号结尾。
  • 缩进很重要。
  • 你几乎不想使用'是'。
  • 您可以检查对象是否在列表中,而不使用“in”运算符显式循环它。
  • 如果你找不到你要找的东西,你应该返回False;大多数情况下你会逃脱它,因为如果你没有明确地返回,函数会返回None,而None不是“真理”。

所以试试:

def operator(input):
    operatorlist = ['+', '-', '*', '/', '^', 'sin', 'cos']

    if input in operatorList:
        return True

    return False

甚至更简洁:

def operator(input):
    operatorlist = ['+', '-', '*', '/', '^', 'sin', 'cos']
    return input in operatorList

答案 2 :(得分:2)

使用in运算符:

return (input in operatorlist)

(括号不是必需的,我已将它们包括在内以使其更清晰。)

您可能希望通过a tutorialbook来开始使用Python。

答案 3 :(得分:2)

for i in operatorlist不会运行operatorlist的索引,而是实际的元素。因此i在第一个循环中为'+',在第二个循环中为'-',依此类推。

因此if input is operatorlist[i]应该是if input is i

最后,实际上整个函数可以被逻辑运算input in operatorlist取代。所以你可以这样做:

def operator(input):
    return input in ('+', '-', '*', '/', '^', 'sin', 'cos')

答案 4 :(得分:1)

def operator(x):
    return x in {'+', '-', '*', '/', '^', 'sin', 'cos'}

您可能希望避免为每个函数调用创建一个新集合,在这种情况下,您可以执行...

def operator_check(*operators):
    operators = set(operators)
    def checker(x):
        return x in operators
    return checker

math_operator = operator_check('+', '/', '*', '^', '-')

if math_operator('+'):
    print "it's a math operator!"

答案 5 :(得分:0)

for i in operatorlist更改为for i in range(len(operatorlist))

当你要求i in operatorlist时,那么在每次迭代i实际上都是该条目的元素而不是索引。或者,您可以重新格式化循环体,以反映i是包含相关运算符的实际字符串,而不是索引。