如果列表中不存在该值,则我的列表推导会返回错误“列表索引超出范围”。
目标: 检查由变量(国家/地区)给出的国家/地区的三字母代码,并通过查找元组列表(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而不是破坏程序?变量国家将在稍后再次使用。
答案 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]
。
如果你在开始时生成这个查找表,这也有更快的好处,因为你不需要每次遍历列表中的每个元素。