在Python中优化长if语句

在Python中优化长if语句,python,if-statement,Python,If Statement,我在一个循环中有一个if语句,它将一个变量设置为一个特定的国家名称,如果它符合条件,也就是说,如果参数包含国家名称 参数是在不同位置包含国家名称的路径列表,即C:\\some\\path\\text\u country\u text.xlsx或C:\\some\\path\\text\u country\u text.xlsx if声明目前相当长,因为它检查了一个相当长的国家列表。我写的代码可以工作,但看起来没有真正优化。有没有较短的方法可以做到这一点 def my_function(*args

我在一个循环中有一个if语句,它将一个变量设置为一个特定的国家名称,如果它符合条件,也就是说,如果参数包含国家名称

参数是在不同位置包含国家名称的路径列表,即C:\\some\\path\\text\u country\u text.xlsx或C:\\some\\path\\text\u country\u 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

假设您不知道国家/地区名称在国家/地区字符串中的确切位置,因此无法使用切片或正则表达式提取相关部分,您可以调整方法以获取国家/地区列表,然后使用生成器表达式和next提取国家/地区名称:

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

>>> countries = ['Australia', 'Austria']
>>> country = '#Austrian_man#'
>>> next((c_name for c_name in countries if c_name in country), 'Unknown')
'Austria'
>>> country = '#AustrTYPO_man#'
>>> next((c_name for c_name in countries if c_name in country), 'Unknown')
'Unknown'
你可以做: 国家=[所有国家] 代码:


为了好玩,为了展示集合的威力,只需一个for循环和一个set.intersection调用即可解决此问题:


因此,循环将只循环输入参数和预定义国家/地区集中的国家/地区。

如果国家/地区名称在路径中处于相同位置,则只需将其提取出来,可能会将其与名称列表或字典进行比较。当然,这是非常低效的,但是,如果您能更清楚地指定函数所需的输入和输出,则会有所帮助。@CongMa该输入是指向Excel国家/地区表的路径列表。该函数应该是将这些表中的值插入全局/通用Excel表的自动化功能。这很有效。我必须把国家的名字放在代表性价值观旁边的一栏中。我从表中获取所有值,但国家名称仅在路径中,而不在表中。谢谢!到目前为止,我还不知道next。我一定会调查的。非常感谢!我还没想过这个简单的解决方案。谢谢!我可能会根据这个调整我的代码。我的输入是140个Excel表格。提高效率可能是个好主意。
for country in args:
  for i in Countries:
        if i in country:
          country_name = i
def my_function(*args):
    countries = set(['Austria', 'Australia', 'Brazil', 'Denmark'])
    for country_name in countries.intersection(args):
        print(country_name)