如何使用列表推导来比较1D和2D列表:

问题描述 投票:1回答:5

我有这些清单:

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

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

python
5个回答
2
投票

使用operator.itemgetter

import operator

all(x in map(operator.itemgetter(0), a_list[0:3]) for x in ['a','b','c'])
# True

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)

0
投票

以下怎么样?迭代a_list的子集并测试子元素0是否是b_list的一部分。

all(x[0] in b_list for x in a_list[0: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]

"""

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

OUTPUT:

True
© www.soinside.com 2019 - 2024. All rights reserved.