所以我试图在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
因为我被告知,基本上,风格上是愚蠢的,以这种方式写。
答案 0 :(得分:11)
一行:
return input in operatorlist
这里不需要做条件,in运算符已经返回一个布尔值。
答案 1 :(得分:3)
这里有一些事情:
所以试试:
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 tutorial或book来开始使用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
是包含相关运算符的实际字符串,而不是索引。