lijst = [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [],
[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [],
[], [], [], [], [], [], [], [], [], [], [], [],
['/vacatures/oracle-plsql-ontwikkelaar-1/'], [], [], [], [],
['/vacatures/oracle-plsql-ontwikkelaar-1/'],
['/vacatures/business-intelligence-developer-1/'], [], [], [], [], [],
['/vacatures/business-intelligence-developer-1/'],
['/vacatures/oracle-dba/'], [], [], ['/vacatures/oracle-dba/'],
['/vacatures/database-beheerder/'], [], [], [],
['/vacatures/database-beheerder/'],
['/vacatures/sql-server-dba-powershell/'], [], [], [],
['/vacatures/sql-server-dba-powershell/'],
['/vacatures/junior-msbi-consultant/'], [], [], [], [], [],
['/vacatures/junior-msbi-consultant/'],
['/vacatures/senior-msbi-consultant/'], [], [], [], [], [],
['/vacatures/senior-msbi-consultant/'],
['/vacatures/medior-msbi-consultant/'], [], [], [], [],
['/vacatures/medior-msbi-consultant/'],
['/vacatures/zos-mainframe-specialist/'], [], [],
['/vacatures/zos-mainframe-specialist/'],
['/vacatures/junior-business-analyst/'], [], [], [], [],
['/vacatures/junior-business-analyst/'], [], [], [], [], [], [], [],
[], ['/vacatures/oracle-plsql-ontwikkelaar-1/'], [], [],
['/vacatures/oracle-dba/'], [], [],
['/vacatures/business-intelligence-developer-1/'], [], [],
['/vacatures/database-beheerder/'], [], [],
['/vacatures/sql-server-dba-powershell/'], [], [], [], [], [], [], [],
[], [], []]我有个问题。如何过滤空列表并删除二维列表中的重复项?
发布于 2017-09-20 00:57:20
这很简单,就像做
new_list0 = list(filter(len, lijst))然后,要删除重复项,可以将new_list转换为set,然后将其转换回列表。如下所示
new_list1 = list(set(tuple(x) for x in new_list0))如果您想将new_list1的元素(现在是元组)转换回列表,您可以这样做
new_list2 = list(map(list, new_list1))
但是,考虑到上面执行的来回次数(从生成器到列表,到设置,...,到列表,等等),在性能方面看起来更好的东西可能是
new_list = []
for el in lijst:
if el and el not in new_list:
new_list.append(el)
#print(new_list)最后,请注意,new_list仍将是二维的,就像原始的一样。如果想要使其成为一维的,可以使用making it flat,如下所示
import itertools
new_list = list(itertools.chain.from_iterable(new_list))或者直接将其创建为一维列表,并将时间复杂度降低到O(n) (通过避免in运算符而不是O(n**2) )
new_set = set()
for el in lijst:
if el:
new_set.update(el)
new_list = list(new_set)
答案经过测试且功能正常
发布于 2017-09-20 02:04:34
你的列表并不是真正的二维。每个列表要么有0个元素,要么有1个元素。
在这种情况下,您可以只提取字符串并将它们放入一个集合中:
print({l[0] for l in lijst if l})它输出:
set(['/vacatures/junior-msbi-consultant/', '/vacatures/junior-business-analyst/', '/vacatures/business-intelligence-developer-1/', '/vacatures/zos-mainframe-specialist/', '/vacatures/sql-server-dba-powershell/', '/vacatures/database-beheerder/', '/vacatures/medior-msbi-consultant/', '/vacatures/oracle-dba/', '/vacatures/oracle-plsql-ontwikkelaar-1/', '/vacatures/senior-msbi-consultant/'])它既简洁又快速(O(n))。
https://stackoverflow.com/questions/46305938
复制相似问题