列表中元素顺序的问题?

例如:

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

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

阅读 7.8k
4 个回答
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 來判斷的:

# 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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题