扫码关注官方订阅号
例如:
list1=[[a,b],[a,c,d],[b,c]] list2=[b,a]
如何判断list2属于list1?忽略元素顺序。 有无效率高的算法?
认证0级讲师
def is_contain(a, b): # a in b return any([set(_) == set(a) for _ in b]) # return set(a) in [set(_) for _ in b]
所有元素包括list2都转成set,挨个比较
如果 a, b, c, d 的型態是 hashable 則使用轉成 set 來判斷的:
a
b
c
d
# 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 問:
in
def is_contain(x, y): # x in y return sorted(x) in (sorted(_) for _ in y)
然後使用 generator expression 可能會有效率一點
我回答過的問題: Python-QA
列表属于有序序列,要无序的就用set(集合)set1={set(x) for x in list1}set2=set(list2)set1<set2 或者用set1.issubset(set2)
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
所有元素包括list2都转成set,挨个比较
如果
a,b,c,d的型態是 hashable 則使用轉成 set 來判斷的:或是:
若是 unhashable 的, 那可以考慮全部排序後用
in問:然後使用 generator expression 可能會有效率一點
我回答過的問題: Python-QA
列表属于有序序列,要无序的就用set(集合)
set1={set(x) for x in list1}
set2=set(list2)
set1<set2 或者用set1.issubset(set2)