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)的列表中。
我希望比较不区分大小写。
可以肯定的是,list1和list2在list4中,但不在list3中。我该怎么办?
另一方面,我怎么知道列表是否是列表集合。
换句话说,如果我不是定义列表的人,我如何区分列表是否只是元素列表的集合。
答案 0 :(得分:1)
第一项 - 您希望进行不区分大小写的匹配。最好的方法是将所有内容转换为一个案例(上部或下部)。因此,对于每个列表,运行
list1 = map(lambda x: x.lower(), list1)
这会将您的列表转换为小写。我们假设你已经做到了。
其次,对于两个“简单”列表(非嵌套)的比较,您可以简单地说
if set(list1) < set(list2):
比较list1是否为list2的子集。在您的示例中,它将是错误的。
最后,如果要检查列表是否嵌套:
if ( type(list4[0]) == list) :
在这种情况下,这是真的。然后,只需迭代list4的元素并进行上面的集合比较。
答案 1 :(得分:1)
您可以使用lower()
将所有列表的所有元素设置为小写,以实现不区分大小写。
def make_case_insensitive(lst):
return [i.lower() for i in lst]
例如,
list1=make_case_insensitive(list1)
因为,更大的列表略有不同(包含列表作为元素),你必须稍微改变功能。
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)
检查较大列表中的任何元素是否是较小集合的超集。如果条件满意,打印列表更大,否则打印不在biggger列表中。首先从set
生成list
。
print "Is in bigger list" if any(set(element).issuperset(set(list1)) for element in list4) else "not in biggger list"
要以稍高的可读性写它,请执行:
if any(set(element).issuperset(set(list1)) for element in list4):
print "Is in bigger list"
else:
print "not in biggger list"
最后,检查更大列表中是否存在嵌套列表:
print any(type(element)==list for element in list4)
答案 2 :(得分: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
。