我有这些清单:
a_list =[['a','1'],['b','2'],['c','3']...]
b_list=['a','b','c']
要访问a_list
中的字母元素,我们会做a_list[0][0]
但是如果我尝试这样做a_list[0:3][0]
我一直得到与a_list[0][0]
相同的结果。我如何获得a_list
的所有三个元素。
这是问题因为我不能使用以下代码:
all(x in [['a','1'],['b','2'],['c','3']] for x in ['a','b','c'])
我有的列表要大得多,所以如果我可以表示像这样的切片会很好:
all(x in a_list[0:3][0] for x in ['a','b','c'])
但是,列表代表切片的索引而不是列表中包含的列表的索引。
使用operator.itemgetter
:
import operator
all(x in map(operator.itemgetter(0), a_list[0:3]) for x in ['a','b','c'])
# True
根据How to efficiently compare two unordered lists (not sets) in Python?,您可以使用计数器
from collections import Counter
Counter(i[0] for i in a_list[:3]) == Counter(b_list)
以下怎么样?迭代a_list
的子集并测试子元素0是否是b_list
的一部分。
all(x[0] in b_list for x in a_list[0:3])
检查b_list
中a_list
的每个元素的存在并返回True
或Fasle
取决于元素是否存在。
a_list =[['a','1'],['b','2'],['c','3']]
b_list=['a','b','c','d']
a_list_1 = list(map(lambda x:x[0],a_list))
result = list(map(lambda a: a in a_list_1, b_list))
"""
output
[True, True, True, False]
"""
使用list-comprehension
:
a_list =[['a','1'],['b','2'],['c','3']]
b_list=['a','b','c']
print(all(x[0] in b_list for x in a_list))
OUTPUT:
True