在python中比较两个列表并获取新列表

在python中比较两个列表并获取新列表,python,list,Python,List,我有一个列表-a和一个列列表-b a = [2, 4, 1, 1, 6, 1, 1, 3, 5, 1] b = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] 我想从列表b中选取值为1的列,与列表a相比 我希望输出为: c = ["C", "D", "F", "G", "J"] 我该怎么做?简易理解任务+zip: >>> c = [y for (x, y) in zip(a, b) if x == 1] >>

我有一个列表-a和一个列列表-b

a = [2, 4, 1, 1, 6, 1, 1, 3, 5, 1]
b = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
我想从列表b中选取值为1的列,与列表a相比

我希望输出为:

c = ["C", "D", "F", "G", "J"]

我该怎么做?

简易理解任务+zip:

>>> c = [y for (x, y) in zip(a, b) if x == 1]
>>> c
['C', 'D', 'F', 'G', 'J']

易于理解的任务+zip:

>>> c = [y for (x, y) in zip(a, b) if x == 1]
>>> c
['C', 'D', 'F', 'G', 'J']

我会用压缩和列表理解来做

>>> a = [2, 4, 1, 1, 6, 1, 1, 3, 5, 1]
>>> b = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
>>> c = [x[0] for x in zip(b, a) if x[1] == 1]
>>> c
['C', 'D', 'F', 'G', 'J']
>>>

我会用压缩和列表理解来做

>>> a = [2, 4, 1, 1, 6, 1, 1, 3, 5, 1]
>>> b = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
>>> c = [x[0] for x in zip(b, a) if x[1] == 1]
>>> c
['C', 'D', 'F', 'G', 'J']
>>>
经典方法:

>>> c = [b[i] for i in range(len(b)) if i<len(a) and a[i] == 1]
>>> c
['C', 'D', 'F', 'G', 'J']
经典方法:

>>> c = [b[i] for i in range(len(b)) if i<len(a) and a[i] == 1]
>>> c
['C', 'D', 'F', 'G', 'J']
以多种方式完成:

列表理解

Lambda滤波器

请注意,列表理解会更快,因为如果b更大,列表理解只会增加到a的长度,而不是列表b的长度。

以多种方式完成:

列表理解

Lambda滤波器


请注意,列表理解会更快,因为如果b更大,它只会延伸到a的长度,而不是列表b的长度。

回答好,但你不需要在x周围加括号,回答好,但你不需要在x周围加括号,如果列表b比a大,我们将得到一个索引超出范围的错误:我们现在不需要:检查它!最好是迭代,直到lena:-就像rangelenaNo中的i一样,我们不能这样做,因为在列表a大于b的情况下,我们得到了b[i]的索引超出范围错误:-这将是一个新添加的条件。如果列表b大于a,它已经被覆盖,因为我们可以安全地说,b中的所有额外项都无效。如果列表b大于a,我们将得到一个索引超出范围错误:我们现在不做:检查它!最好是迭代,直到lena:-就像rangelenaNo中的i一样,我们不能这样做,因为在列表a大于b的情况下,我们得到了b[i]的索引超出范围错误:-这将是一个新添加的条件。如果列表b大于a,它已经被覆盖,因为我们可以放心地说,b中的所有额外项目都是无效的。