python - 有没有办法缩短多个条件,如下所示?

标签 python python-3.x if-statement

抱歉,我真的不知道如何表达这个问题,所以它可能看起来模棱两可。

我想做的基本上是我有一个代码可以读取用户的输入并将其与某些字母进行比较,但这个过程应该不区分大小写。所以我使用 .lower() 字符串方法。

if (letter.lower() == "a" or letter.lower() == "b" or letter.lower() == "c"):

(在这种情况下,应接受值“A”、“B”、“C”、“a”、“b”和“c”,并拒绝分配给名称“letter”的所有其他值。)

可以进一步缩短吗?可读性并不那么重要,除非它是真正的官话,人类的舌头无法理解哈哈。

我试过:

if (letter.lower() == "a" or "b" or "c"):

这是行不通的。也没有:

if (letter.lower() == ("a" or "b" or "c")):

我感谢任何意见。提前致谢:)

最佳答案

我认为您正在寻找的是关键字in。以下可能是最“pythonic”的方式。

if letter.lower() in ['a','b','c']:

这应该适合你。虽然,如果您正在寻找速度,最好创建一个字典或设置并从中进行查找。 由于 in 运算符的复杂度对于数组和字符串是平均 O(n) 但平均 O(1) 和最坏情况 O(n) 集合和字典。

例如,

chars = set(['a','b','c'])
if letter.lower() in chars:

如果您有兴趣阅读更多关于复杂性差异的信息,这里是 Python Time Complexity非常有用的文档!

关于python - 有没有办法缩短多个条件,如下所示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48273222/

相关文章:

sql - postgresql 函数中的 IF ELSE

python - 一行代码来保存 if 语句的值(value)?

python - 关闭 Twisted 中的 Perspective Broker 连接

python - mac 和 textmate 的新手,有人可以解释这些快捷方式吗?

python - 使用 Scikit-learn (sklearn) 估算整个 DataFrame(所有列)而不迭代列

python - ESP8266 Micropython - 连接到大学 Wi-fi (WPA2 Enterprise PEAP)

python - 为什么在写入 csv 时 Pandas 会删除前导零?

python - Numpy 聚合到 bin 中,然后计算总和?

python - PyLint/PyLint3 无法识别文档字符串

linux - Linux 终端中循环内的 IF 语句不起作用