How to create bulk if statements
我有一个变量
1 2 3 4 5 | if var == 1: num ="a" if var == 2: num ="b" ... |
有更简单的方法吗?
你可以做到
1 | num = dict(zip(range(1,6), 'abcde')).get(var, 'f') # f in case you need a default |
使用字典模式模拟开关。您只需为所有情况构建一个映射,并使用带有默认值的
1 2 | d = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'} num = d.get(var, 'f') |
如果您的数据和映射与您的示例一样规则和简单,那么还有更简单的方法,例如:
1 | num = 'abcde'[var - 1] |
1 | chr(ord('a') + var -1) |
会是答案的
这取决于您的用例。虽然其他人提供的答案是正确的,但他们增加了复杂性,这可能不容易阅读或做得比需要的多。让我提出几个选择。
简单明了
使用
1 2 3 4 5 6 7 8 | if var == 1: num ="a" elif var == 2: num ="b" elif var == 3: ... else: num ="f" |
优点:每次检查都是一个操作,除非需要,否则不会转到其他语句。此外,您清楚地看到了正在发生的事情,并且维护这一点非常简单和琐碎。
缺点:它看起来不酷,也不会炫耀你辛苦获得的python体验点。咬住子弹。
列表索引因为您的键是一个整数,所以您可以使用它来索引列表中的位置。
1 2 3 | #values = ['a','b','c','d','e','f'] values ="abcdef" num = values[var-1] # 0 < var <= len(values) |
优点:易于维护和扩展。看起来不错,只有两行。随时可以将密钥转换为有序数字时使用。
缺点:您只能从列表中返回元素,并且在返回之前对每个元素进行评估。如果是琴弦,一切都很好。
字典方法
使用自然处理键和值的字典。@schwobaseggl建议的示例。
1 | num = dict(zip(range(1,6), 'abcde'))[var] |
或
1 2 | d = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'} num = d[var] |
优点:具有关键性和价值性的自然结构。键(可以是整数或字符串)和值(可以是任何对象)的灵活性。在处理字典方面,python也明显变得更好。使用键来实现灵活性。
缺点:潜在的过度杀伤力。在您的例子中,使用它没有任何好处,但是仍然必须生成dictionary对象。一般来说,所有元素都是在构造字典时进行评估的。创建比列表更昂贵。
最适合你的情况
正如约翰·凯恩所建议的,通过在字母表中的给定位置查找字符,可以很容易地完成从整数到字符串的转换。
1 | chr(ord('a') + var - 1) |
或
1 2 | ord_a = ord('a') # alphabet start position num = chr(ord_a + var - 1) # return var's character from alphabet |
优点:这只说明从字母表中返回var的位置,从
缺点:仅针对所述问题。