比较两个python列表并将较短的列表扩展为较长列表的长度

时间:2016-07-19 21:58:17

标签: python list

我的问题标题有点令人困惑,我只是不确定如何只用标题来解释它。

我有两个清单。

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

3 个答案:

答案 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]