我有两个清单。我想检查一个列表是否是其他列表的子集。
list1 = ['12345678\n', '87654321']
list2 = ['01234567','12345678', '87654321', '23456789']
问题是我的第一个列表,即 list1 将始终包含 \ n ,因为我正在从具有单独行中的项目的文件中读取它。但我想忽略这个 \ n 并继续比较。我的下面代码总是进入 else 部分。有没有办法在不修改两个列表的情况下实现 True 方案? 我的代码如下:
flag = True # Initialized value of flag to default 'True' at beginning
for val in list1:
if val not in list2:
flag = False
if flag == True
.... # Do some operation if flag is 'True'
....
else
print 'list1 is not a subset of list2'
答案 0 :(得分:2)
您可以使用strip
删除所有空格字符,然后将其与第二个列表中的项目进行比较。此外,您可以使用all
替换for循环:
>>> all(e.strip() in list2 for e in list1)
True
此外,您可能会考虑在创建list1
时删除换行符,并使用set
代替list
来加速查找。
>>> set(map(str.strip, list1)).issubset(list2)
True