如何检查一个变量是否存在于多个列表中?

3

这是我代码的一部分!

division = ["Division","Divide","/","div"]
multiplication =["*","x","times","multiply","multiplication","multiple"]
subtraction = ["-",'minus','subtract','subtraction']
addition = ['+','plus','addition','add']
root = ['root','squareroot','square root']
square = ['square','squared','power 2']

choice = input('calculation type')
print(choice == (division or multiplication or subtraction or addition))

到目前为止,它只返回“False”。如何检查一个变量是否存在于多个列表中?我尝试过在列表内创建列表,但仍然得到“False”,以下是代码...
division = ["Division","Divide","/","div"]
multiplication = ["*","x","times","multiply","multiplication","multiple"]
subtraction = ["-",'minus','subtract','subtraction']
addition = ['+','plus','addition','add']
root = ['root','squareroot','square root']
square = ['square','squared','power 2']
basic_double = [division,multiplication,subtraction,addition]
basic_single = [root,square]
choice = input('calculation type')
print(choice == basic_double or basic_single)

非常感谢您的帮助! :D 谢谢!!!


any(choice in ls for ls in [division, multiplication, subtraction, addition]) - L3viathan
@L3viathan,希望不会太麻烦,我真的很新手xD,但你能解释一下吗?哈哈哈哈对不起:DD - Dave Matthew
我会在答案中解释。 - L3viathan
我觉得应该有一个常见错误来源的列表,以及它们错误的原因。许多人似乎对于 Python 中的 or 不起作用这一事实感到困惑。 - Elliot Roberts
@ElliotRoberts 那对于初学者来说会非常有帮助。 - Dave Matthew
5个回答

3

测试choice是否在任何一个列表中:

any(choice in ls for ls in [division, multiplication, subtraction, addition])

any会在给定可迭代对象中至少有一个元素为真时返回True。

choice in ls用于测试choice是否为列表ls的元素。

choice in ls for ls in [division, multiplication, subtraction, addition]是一个生成器推导式,它返回[division, multiplication, subtraction, addition]中任何可能的ls,并计算choice in ls的结果。

如果其中一个列表包含了choice,则any将返回True,否则返回False。


3
你可以使用 itertools.chain() 来检查列表中的所有选项,如下所示:

if choice in chain(division, multiplication, subtraction, addition):

1

如果你想检查 choise 是否在你提供的四个列表中的任何一个中:

if choice in division + multiplication + subtraction + addition:
   # do something when its in any of it.
   ...

0

目前,你正在将一个字符串 choice 与一系列列表进行比较。由于你正在比较两种不同的数据类型,因此这永远不会是 True。

你应该使用 "in" 关键字针对每个列表进行检查。

if choice in division:
     #this returns true if the String set to choice is in the list of objects in division.
else if choice in multiplication:
.
.
.

这个比较将帮助您找到您正在寻找的列表中的单词。


0

现在,您的代码正在print函数内执行以下比较:

choice == ["Division","Divide","/","div"] or ["*","x","times","multiply","multiplication","multiple"] or ["-",'minus','subtract','subtraction'] or ['+','plus','addition','add']

由于短路计算,这将简化为:

choice == ["Division","Divide","/","div"]

这个总是评估为False,因为choice不是一个列表。

我会展开包含[division, multiplication, subtraction, addition]的列表,然后测试是否choice在该列表中。

flattened = [item for ls in [division, multiplication, subtraction, addition] for item in ls]

print(choice in flattened)

查看这个答案问题,了解有关在Python中展平列表的更多细节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接