我试图创建一个函数,将多个变量与一个整数进行比较,并输出一个由三个字母组成的字符串。我想知道是否有办法将其翻译成python。那么说:
x = 0
y = 1
z = 3
mylist = []
if x or y or z == 0 :
mylist.append("c")
if x or y or z == 1 :
mylist.append("d")
if x or y or z == 2 :
mylist.append("e")
if x or y or z == 3 :
mylist.append("f")
将返回以下内容的列表:
["c", "d", "f"]
这样的事情可能吗?
27条答案
按热度按时间pinkon5k1#
这里还有一种方法:
它是列表理解和任何关键字的混合。
6tr1vspr2#
这个
or
正如这个答案所解释的,它不是那样工作的。而一般的答案是使用
这不是针对具体问题的最佳方案。在您的情况下,您正在进行重复测试,因此有必要编写一组以下变量:
我们可以使用字典简化此操作-这将产生相同的值:
或者如果
mylist
如果是任意的,则可以在值上循环,并将其与Map匹配:llew8vvj3#
您可以通过两种方式来开发它
或
uujelgoq4#
问题
而用于测试多个值的模式
非常可读,在许多情况下都能工作,但有一个陷阱:
但是我们想要
解决方案
前面表达式的一个概括基于ytpillai的答案:
可以写成
虽然此表达式返回正确的结果,但其可读性不如第一个表达式:-(
qltillow5#
这对你有帮助。
a64a0gku6#
你可以把这个联合起来
在一个变量中。
将我们的条件更改为:
输出:
sirbozc57#
你误解了布尔表达式的工作原理;它们不像一个英语句子,你猜这里所有名字的比较都是一样的。您正在寻找:
if 1 in (x, y, z):
if 1 in {x, y, z}:
siotufzp8#
您的问题更容易通过以下字典结构解决:
uyto3xhc9#
如martijn pieters所述,正确且最快的格式为:
使用他的建议,您现在将拥有单独的if语句,以便python将读取每条语句,无论前者是否正确
True
或False
. 例如:这是可行的,但如果您对使用字典感到满意(请参阅我在这里所做的),您可以通过制作一个初始字典,将数字Map到您想要的字母,然后只使用for循环来解决这个问题:
o7jaxewo10#
直接的写作方式
x or y or z == 0
是但是我不认为你喜欢它这条路很难看。
另一种方法(更好)是:
顺便说一句,很多
if
s可以写成这样的东西wgx48brx11#
如果您非常懒惰,可以将值放入数组中。比如
你也可以把数字和字母放在字典里,然后去做,但这可能比简单的if语句要复杂得多。这就是你试图变得特别懒惰的结果:)
还有一件事,你的
将编译,但不是按您希望的方式编译。当您在if语句中简单地放入一个变量时(示例)
程序将检查变量是否为空。编写上述语句的另一种方法(更有意义)是
bool是python中的一个内置函数,它基本上执行验证布尔语句的命令(如果您不知道这是什么,那么这就是您现在试图在if语句中实现的:)
我发现的另一个懒惰的方法是:
wkftcu5l12#
要检查值是否包含在一组变量中,可以使用内置模块
itertools
及operator
.例如:
进口:
声明变量:
创建值Map(按要检查的顺序):
使用
itertools
要允许重复变量,请执行以下操作:最后,使用
map
函数创建迭代器:然后,在检查值时(按原始顺序),使用
next()
:等
这比传统方法有优势
lambda x: x in (variables)
因为operator
是一个内置模块,比使用lambda
它必须创建一个自定义就地功能。检查列表中是否存在非零(或假)值的另一个选项:
等价物:
gzjq41n413#
这里提供的所有优秀答案都集中在原始海报的具体要求和
if 1 in {x,y,z}
martijn pieters提出的解决方案。他们忽略了这个问题更广泛的含义:
如何针对多个值测试一个变量?
如果使用字符串,提供的解决方案将不适用于部分命中,例如:
测试字符串“wild”是否包含多个值
或
对于这种情况,最容易转换为字符串
然而,应该注意的是,正如
@codeforester
,使用此方法将丢失单词边界,如中所示:三个字母
rot
在列表中以组合形式存在,但不能作为单个单词存在。测试“腐烂”会失败,但如果其中一个列表项是“地狱中的腐烂”,那也会失败。结果是,如果使用此方法,请小心您的搜索条件,并注意它确实有此限制。
uyto3xhc14#
我认为这将更好地处理它:
输出:
8oomwypt15#
在这里,set是一种很好的方法,因为它对变量进行排序,这似乎是您的目标。
{z,y,x}
是{0,1,3}
无论参数的顺序如何。这样,整个解就是o(n)。