我的问题标题有点令人困惑,我只是不确定如何只用标题来解释它。
我有两个清单。
list_1 = [10,20,30,40,50,60,70,80,90]
list_2 = [10,40,70]
预期产出:
new_list = [10,0,0,40,0,0,70,0,0]
我该怎么做?以下是我所拥有的,我不确定出了什么问题:
def expand_list(complete_list, to_be_expand_list):
expanded_list = []
for i in complete_list:
for j in to_be_expand_list:
if i == j:
expanded_list.append(j)
else:
if expanded_list[-1] != 0:
expanded_list.append(0)
return expanded_list
答案 0 :(得分:6)
尝试这样的事情:
def expand_list(full_list, short_list):
return [x if x in short_list else 0 for x in full_list]
这使用列表推导来生成一个列表,该列表是完整列表的长度,但仅包含短列表中的那些元素,用零替换所有其余元素。
答案 1 :(得分:2)
list_1 = [10,20,30,40,50,60,70,80,90]
list_2 = [10,40,70]
new_list = list_1[:]
for i, v in enumerate(list_1):
if v not in list_2:
new_list[i] = 0
print new_list
结果:
[10, 0, 0, 40, 0, 0, 70, 0, 0]
这将检查list_1中不在list_2中的位置,并将它们设置为0
答案 2 :(得分:2)
您正在审核to_be_expand_list
上每个项目的所有complete_list
以及(几乎)每次迭代您附加项目的内容,因此最后您将拥有len(list1)*len(list2)
个项目。
您应将其更改为:
def expand_list(complete_list, to_be_expand_list):
expanded_list = []
for i in complete_list:
if i in be_expand_list:
expanded_list.append(i)
else:
expanded_list.append(0)
return expanded_list
如果您寻求更简单的方法,可以使用list comprehension:
[x if x in list2 else 0 for x in list1]