2015-11-07 116 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" 

若要稍微可读性写,做