2015-11-07 212 views
-1
list1 = ['A','B'] 
list2 = ['a','c'] 
list3 = ['x','y','z'] 
list4 = [['A','b','c'],['a','x'],['Y','Z'],['d','g']] 

我想檢查list(list1,list2,list3)的所有元素是否包含在另一個更大列表(list4)中的任何列表中。列表和元素比較python

我想比較是不區分大小寫的。

可以肯定的是,這裏的list1和list2是在list4中,而不是在list3中。我該怎麼做?

另一方面,如何知道列表是否是列表的集合。

換句話說,如果我不是定義列表的人,我該如何區分列表是否是列表中的元素列表的集合。

回答

1

第一項 - 你想做大小寫不敏感的匹配。做到這一點的最佳方式是將所有內容轉換爲一個案例(上限或下限)。因此,對於每個列表,運行

list1 = map(lambda x: x.lower(), list1) 

這會將您的列表轉換爲小寫。假設你已經做到了。

其次,兩個「簡單」名單(不嵌套)的比較,你可以簡單地說

if set(list1) < set(list2): 

比較,如果列表1是list2中的一個子集。在你的例子中,這將是錯誤的。

最後,如果你想檢查列表是嵌套:

if (type(list4[0]) == list) : 

在這種情況下,將是真實的。然後,只需遍歷list4的元素並進行上面的設置比較。

0

使用set是一個好方法。

list1 = ['A','B'] 
list2 = ['a','c'] 
list3 = ['x','y','z'] 
list4 = [['A','b','c'],['a','x'],['Y','Z'],['d','g']] 

set1 = set(map(lambda s: s.lower(), list1)) 
set2 = set(map(lambda s: s.lower(), list2)) 
set3 = set(map(lambda s: s.lower(), list3)) 
set4 = map(lambda l: set(map(lambda s: s.lower(), l)), list4) 

print(set1) # set(['a', 'b']) 
print(set2) # set(['a', 'c']) 
print(set3) # set(['y', 'x', 'z']) 
print(set4) # [set(['a', 'c', 'b']), set(['a', 'x']), set(['y', 'z']), set(['d', 'g'])] 

lor = lambda x, y: x or y 

reduce(lor, map(lambda s: set1.issubset(s), set4)) # True 
reduce(lor, map(lambda s: set2.issubset(s), set4)) # True 
reduce(lor, map(lambda s: set3.issubset(s), set4)) # False 
  • 做一個區分大小寫字符串比較,隱蔽兩個字符串到大寫或小寫。
  • 若要測試list1中的所有元素均包含在list4中,請使用set.issubset
1

您可以使用lower()使所有列表的所有元素都爲小寫字母以實現不區分大小寫。

def make_case_insensitive(lst): 
    return [i.lower() for i in lst] 

例如,

list1=make_case_insensitive(list1) 

如,biggerlist略有不同(包含列表作爲元素),必須稍微改變功能。

def make_bigger_list_caseinsensitive(bigger_list): 
    return [[i.lower() for i in element] for element in bigger_list] 

list4=make_bigger_list_caseinsensitive(list4) 

檢查更大列表中的任何元素是否是更小集合的超集。打印是在更大的清單如果條件滿意,否則打印不在大表。首先從list開始set

print any(type(element)==list for element in list4) 
:如果biggerlist存在嵌套列表

if any(set(element).issuperset(set(list1)) for element in list4): 
    print "Is in bigger list" 
else: 
    print "not in biggger list" 

最後,檢查:

print "Is in bigger list" if any(set(element).issuperset(set(list1)) for element in list4) else "not in biggger list" 

若要稍微可讀性寫,做