如何结合使用列表推导比较一维和二维列表:

时间:2019-04-23 10:19:11

标签: python

我有以下列表:

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'])

但是列表代替了切片的索引,而不是列表中包含的列表的索引。

5 个答案:

答案 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_lista_list的每个元素的存在 返回TrueFasle取决于元素是否存在。

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