代码之家  ›  专栏  ›  技术社区  ›  user9641453

Python列表理解:列表索引超出范围

  •  0
  • user9641453  · 技术社区  · 6 年前

    如果列表中不存在值,“我的列表理解”将返回错误“列表索引超出范围”。

    客观的 : 检查变量(country)给定的国家的三字母代码,并通过查找元组(country)列表将代码转换为两字母代码

    常数:

    # Two letter code, three letter code, full name
    COUNTRIES = [
        ('US', 'USA', 'United States'),
        ('DE', 'DEU', 'Germany'),
        ....
    ]
    

    代码:

    country = 'EUR'
    
    # Check if code in country has 3 characters (I have multiple checks for two letter codes too) and is not None
    if len(country) == 3 and country is not None:
        country = [code2 for code2, code3, name in COUNTRIES if code3 == country][0]
    

    如果我只包括一个包含三个字母代码USA和DEU的列表,那么代码工作得很好。如果我在变量“country”中添加虚构的代码“EUR”,它不是有效的国家代码,那么我会得到列表索引超出范围的错误。

    我如何才能返回None而不是中断程序?稍后将再次使用可变国家/地区。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Azsgy    6 年前

    我认为列表理解在这里不是一个好的选择。当您想将一个列表转换为另一个列表时,它们是很好的,而您在这里并不想这样做。更好的方法是使用 return 在这里

    然而,我个人的做法是将列表查找转换为dict查找:

    COUNTRIES_LUT = {}
    
    for code2, code3, country in COUNTRIES:
        COUNTRIES_LUT[code2] = country
        COUNTRIES_LUT[code3] = country
    

    最后,你可以使用 COUNTRIES_LUT[your_str] 正如所料。

    如果您在开始时生成这个lookuptable,还可以更快,因为您不需要每次都遍历列表中的每个元素。