在Python中优化long if语句

时间:2018-02-26 10:41:37

标签: python if-statement

我在循环中有一个if语句,如果变量与条件匹配,则将变量设置为特定的国家/地区名称,即参数包含国家/地区名称。

参数是包含不同位置国家/地区名称的路径列表,即C:\\some\\path\\text_country_text.xlsxC:\\some\\path\\text_text_country_text.xlsx

目前if语句很长,因为它会检查相当长的国家/地区列表。我写的代码有效,但它看起来并没有真正优化。有没有更短的方法来做到这一点?

def my_function(*args): 
    for country in args:
        if "Australia" in country:
            country_name = "Australia"
        elif "Austria" in country:
            country_name = "Austria"
        # etc. for many countries

2 个答案:

答案 0 :(得分:4)

假设您不确切知道国家/地区字符串中的国家/地区名称(因此您无法使用切片或正则表达式来提取相关部分),您可以调整自己的方法来获取tags.css国家/地区,然后使用list生成器表达式来提取国家/地区名称:

next()

示例:

next((c_name for c_name in countries if c_name in country), 'Unknown')

答案 1 :(得分:1)

只是为了它的乐趣,并显示set的强大功能,只需一个for循环和set.intersection()调用即可解决此问题:

def my_function(*args):
    countries = set(['Austria', 'Australia', 'Brazil', 'Denmark'])
    for country_name in countries.intersection(args):
        print(country_name)

因此,循环将仅循环遍及输入参数和预定义countries集合中的国家/地区。