首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二维列表排序python 3.6.1 anaconda

二维列表排序python 3.6.1 anaconda
EN

Stack Overflow用户
提问于 2017-09-20 00:55:33
回答 2查看 96关注 0票数 2
代码语言:javascript
复制
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/'], [], [], [], [], [], [], [],
         [], [], []]

我有个问题。如何过滤空列表并删除二维列表中的重复项?

EN

回答 2

Stack Overflow用户

发布于 2017-09-20 00:57:20

这很简单,就像做

代码语言:javascript
复制
new_list0 = list(filter(len, lijst))

然后,要删除重复项,可以将new_list转换为set,然后将其转换回列表。如下所示

代码语言:javascript
复制
new_list1 = list(set(tuple(x) for x in new_list0))

如果您想将new_list1的元素(现在是元组)转换回列表,您可以这样做

代码语言:javascript
复制
new_list2 = list(map(list, new_list1))

但是,考虑到上面执行的来回次数(从生成器到列表,到设置,...,到列表,等等),在性能方面看起来更好的东西可能是

代码语言:javascript
复制
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,如下所示

代码语言:javascript
复制
import itertools
new_list = list(itertools.chain.from_iterable(new_list))

或者直接将其创建为一维列表,并将时间复杂度降低到O(n) (通过避免in运算符而不是O(n**2) )

代码语言:javascript
复制
new_set = set()
for el in lijst:
    if el:
        new_set.update(el)        
new_list = list(new_set)

答案经过测试且功能正常

票数 3
EN

Stack Overflow用户

发布于 2017-09-20 02:04:34

你的列表并不是真正的二维。每个列表要么有0个元素,要么有1个元素。

在这种情况下,您可以只提取字符串并将它们放入一个集合中:

代码语言:javascript
复制
print({l[0] for l in lijst if l})

它输出:

代码语言:javascript
复制
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))。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46305938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档