素材牛VIP会员
列表中元素顺序的问题?
 黑***心  分类:Python  人气:993  回帖:4  发布于6年前 收藏

例如:

 list1=[[a,b],[a,c,d],[b,c]]
 
 list2=[b,a]
 

如何判断list2属于list1?忽略元素顺序。
有无效率高的算法?

 标签:listpython

讨论这个帖子(4)垃圾回帖将一律封号处理……

Lv5 码农
云***_ CEO 6年前#1

所有元素包括list2都转成set,挨个比较

Lv6 码匠
飞***z 站长 6年前#2
def is_contain(a, b):  # a in b
    return any([set(_) == set(a) for _ in b])
  # return set(a) in [set(_) for _ in b]
Lv6 码匠
lx***rx UI设计师 6年前#3

列表属于有序序列,要无序的就用set(集合)
set1={set(x) for x in list1}
set2=set(list2)
set1<set2 或者用set1.issubset(set2)

Lv6 码匠
j3***16 页面重构设计 6年前#4

如果 a, b, c, d 的型態是 hashable 則使用轉成 set 來判斷的:

# by hncg
def is_contain(x, y):  # x in y
    return any([set(_) == set(x) for _ in y])

或是:

def is_contain(x, y):  # x in y
    return set(x) in (set(_) for _ in y)

若是 unhashable 的, 那可以考慮全部排序後用 in 問:

def is_contain(x, y):  # x in y
    return sorted(x) in (sorted(_) for _ in y)

然後使用 generator expression 可能會有效率一點


我回答過的問題: Python-QA

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取