所以,我有3个列表如下:
list_1 = ['a','b','c']
list_2 = ['b','c']
list_3 = [5,4]
我希望从list_2&中生成第四个值列表。 list_3将映射到list_1。 list_2和list_3独立于list_1,但是是list_1的子集,并且相互映射。即list_2和list_3缺少项'a'和相应的值。
我想处理缺失值并指定一些值,即0或空字符串。我想用内联函数来做这件事。到目前为止,我已经尝试了以下但它失败了。我做错了什么?
list_4 =[lambda i:list_3[list_2.index(list_1[i])] except "" for i in range(len(list_1))]
我的最终结果应如下所示:
list_4=[0,5,4]
答案 0 :(得分:2)
为什么不检查是否存在值,而不是依赖于异常处理?
list_4 = [(list_3[list_2.index(item)] if item in list_2 else 0) for index,item in enumerate(list_1)]
答案 1 :(得分:2)
更有效的方式来做你想做的事:
dict_2_to_3 = dict(zip(list_2, list_3))
list_4 = [dict_2_to_3.get(i, 0) for i in list_1]
.get()
功能可让您为未找到的内容指定默认值。答案 2 :(得分:2)
你不能内联“除了”那样;他们只是在尝试/除了对,而那些不能在lambda中完成。
除非这是家庭作业或谜题,否则我会使用字典:
>>> list_1 = ['a','b','c']
>>> list_2 = ['b','c']
>>> list_3 = [5,4]
>>>
>>> mymap = dict(zip(list_2, list_3))
>>> list_4 = [mymap.get(x,0) for x in list_1]
>>> list_4
[0, 5, 4]
zip将两个列表组合成一对:
>>> zip(list_2, list_3)
[('b', 5), ('c', 4)]
dict生成一个字典(关联数组):
>>> mymap = dict(zip(list_2, list_3))
>>> mymap
{'c': 4, 'b': 5}
>>> mymap['c']
4
>>> mymap['b']
5
和字典上的.get(a,b)
方法意味着“查找键a并返回该值,但如果未找到键,则返回b。”
>>> mymap.get("c", 0)
4
>>> mymap.get("nope", 0)
0
答案 3 :(得分:1)
根据您使用的Python版本,可能尚未包含list.enumerate()。枚举仍然作为内置存在,并将返回(index,item)的元组。所以你要找的那条线是:
list_4 = [(list_3[list_2.index(item)] if item in list_2 else 0) for index,item in enumerate(list_1)]