我有以下列表:
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'])
但是列表代替了切片的索引,而不是列表中包含的列表的索引。
答案 0 :(得分:2)
使用operator.itemgetter
:
import operator
all(x in map(operator.itemgetter(0), a_list[0:3]) for x in ['a','b','c'])
# True
答案 1 :(得分:1)
根据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)
答案 2 :(得分:0)
以下内容如何?遍历a_list
的子集,并测试子元素0是否是b_list
的一部分。
all(x[0] in b_list for x in a_list[0:3])
答案 3 :(得分:0)
检查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]
"""
答案 4 :(得分:0)
使用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))
输出:
True