如何创建批量if语句

时间:2017-12-23 19:33:29

标签: python

我有一个变量var,可以包含1-5中的任何数字。我想对每种可能性运行if声明。即。

if var == 1:
    num = "a"
if var == 2:
    num = "b"
...

有更简单的方法吗?

3 个答案:

答案 0 :(得分:4)

你可以做到

num = dict(zip(range(1,6), 'abcde')).get(var, 'f')  # f in case you need a default

使用dictionary pattern来模仿开关。您只需为所有案例构建映射,并使用dict.get使用默认值:

d = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
num = d.get(var, 'f')

如果您的数据和映射与示例中的一样简单和平凡,那么还有更简单的方法,例如:

num = 'abcde'[var - 1]

答案 1 :(得分:3)

chr(ord('a') + var -1) 

将是答案

答案 2 :(得分:1)

这取决于您的使用案例。虽然其他人提供的答案是正确的,但是它们的复杂性增加了,这可能不容易阅读或者做得太多而不是需要。我建议几点选择。

简单明了

使用if/elif/else明确说明您想要的内容。

if var == 1:
  num = "a"
elif var == 2:
  num = "b"
elif var == 3:
  ...
else:
  num = "f"

优点:每次检查都是一次操作,除非需要,否则不会转到其他语句。除此之外,你清楚地看到发生了什么,并保持这是简单而微不足道的。

缺点:它看起来并不酷,并且没有展示你辛苦赚来的Python经验值。咬紧牙关。

列出索引 由于您的键是一个整数,您可以使用它来索引列表中的位置。

#values = ['a','b','c','d','e','f']
values = "abcdef"
num = values[var-1] # 0 < var <= len(values)

优点:易于维护和扩展。看起来不错,只有两行。只要您将密钥转换为有序数字,即可使用。

缺点:您只能从列表中返回元素,并在返回之前评估每个元素。在字符串的情况下一切都很好。

字典方法

使用自然处理的字典。 由@schwobaseggl提出的示例。

num = dict(zip(range(1,6), 'abcde'))[var]

d = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
num = d[var]

优点:它具有的自然结构。密钥的灵活性,可以是整数或字符串,也可以是任何对象的值。处理字典时,Python也明显变得更好。使用键可以灵活使用。

缺点:潜在的过度杀伤力。在你的情况下,使用它没有任何优势,但仍然必须生成字典对象。通常,在构造字典时评估所有元素。创建比列表更昂贵。

最适合您的情况

正如约翰凯恩建议的那样,通过在给定位置找到字母表中的字符,可以很容易地完成对字符串的整数。

chr(ord('a') + var - 1)

ord_a = ord('a') # alphabet start position
num = chr(ord_a + var - 1) # return var's character from alphabet

优点:这只是说明从a开始从字母表返回var的位置。绝对是解决问题的最有效方法。

缺点:仅针对陈述的问题。