python用完整列表填充列表中的缺失条目

时间:2019-08-12 13:06:50

标签: python numpy

我有一个代表完整列表的列表:

complete_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

并且带有行的列表(或numpy数组)列表缺少某些项:

list_1 = [['a', 'b', 'c', 'd', 'e'],
          ['e', 'f', 'g', 'h'],
          ['a', 'b', 'c', 'g', 'h']]

我想突出显示缺少的项目,例如N/A喜欢:

list_1 = [['a', 'b', 'c', 'd', 'e', 'N/A', 'N/A', 'N/A'],
          ['N/A', 'N/A', 'N/A', 'N/A', 'e', 'f', 'g', 'h'],
          ['a', 'b', 'c', 'N/A', 'N/A', 'N/A', 'g', 'h']]

是否有numpy中的内置解决方案来实现? pythonic解决方案会是什么样子?目前,我在两个循环中填充了一个空的numpy数组(大小事先已知)。

2 个答案:

答案 0 :(得分:2)

通过简单的成员资格测试

complete_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
lst = [['a', 'b', 'c', 'd', 'e'],
          ['e', 'f', 'g', 'h'],
          ['a', 'b', 'c', 'g', 'h']]

res = [['N/A' if c not in sub_lst else c for c in complete_list]
       for sub_lst in lst]

print(res)

输出:

[['a', 'b', 'c', 'd', 'e', 'N/A', 'N/A', 'N/A'], ['N/A', 'N/A', 'N/A', 'N/A', 'e', 'f', 'g', 'h'], ['a', 'b', 'c', 'N/A', 'N/A', 'N/A', 'g', 'h']]

答案 1 :(得分:1)

可以实现的主要逻辑是:

for lists in list_1:
    for i, x in enumerate(complete_list):
        try:
            if lists[i] != x:
                lists.insert(i,'N/A')
        except IndexError:
            lists.append('N/A')

但是它的时间复杂度是O(m * n)。我正在努力减少它。

更新:经过一些修改,我在这里有了更好的解决方案。多数民众赞成在这里:

complete_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
complete_len = len(complete_list)

list_1 = [['a', 'b', 'c', 'd', 'e'],
          ['e', 'f', 'g', 'h'],
          ['a', 'b', 'c', 'g', 'h']]

for list_ in list_1:             #for each list in list_1
    for i in range(complete_len):
        if list_[i] == complete_list[i]:
            if i != len(list_)-1:
                continue
            else:                #appends last elements and exit(case list_1[0])
                list_ += ['N/A']*(complete_len-len(list_))
                break
        else:
            list_.insert(i,'N/A')
            if len(list_) == complete_len:
                break

for list_ in list_1:
    print(list_)

输出:

['a', 'b', 'c', 'd', 'e', 'N/A', 'N/A', 'N/A']
['N/A', 'N/A', 'N/A', 'N/A', 'e', 'f', 'g', 'h']
['a', 'b', 'c', 'N/A', 'N/A', 'N/A', 'g', 'h']