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

时间:2018-04-13 14:04:39

标签: python list tuples list-comprehension

如果列表中不存在该值,则我的列表推导会返回错误“列表索引超出范围”。

目标: 检查由变量(国家/地区)给出的国家/地区的三字母代码,并通过查找元组列表(COUNTRIES)将代码转换为双字母代码

常数:

# 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的列表,则代码可以正常工作。如果我添加虚构代码“EUR”,这不是变量“country”中的有效国家/地区代码,而是我将List index索引超出范围错误。

如何返回None而不是破坏程序?变量国家将在稍后再次使用。

1 个答案:

答案 0 :(得分:1)

我认为列表理解在这里不是一个好选择。当你想把一个列表变成另一个列表时,它们很好,你真的不想在这里做。一个更好的方法是在这里使用return的常规for循环。

但是,我个人的方法是将列表查找转换为dict查找:

COUNTRIES_LUT = {}

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

最后,您可以按预期使用COUNTRIES_LUT[your_str]

如果你在开始时生成这个查找表,这也有更快的好处,因为你不需要每次遍历列表中的每个元素。