我有一个变量var
,可以包含1-5中的任何数字。我想对每种可能性运行if
声明。即。
if var == 1:
num = "a"
if var == 2:
num = "b"
...
有更简单的方法吗?
答案 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的位置。绝对是解决问题的最有效方法。
缺点:仅针对陈述的问题。