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

时间:2016-09-16 09:36:34

标签: python list

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

a = [2, 4, 1, 1, 6, 1, 1, 3, 5, 1]
b = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]

我想从列表" b"中取出列。与list" a"相比值为1.

我希望输出为:

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

我该怎么做?

4 个答案:

答案 0 :(得分:9)

理解+拉链的简单任务:

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

答案 1 :(得分:3)

经典方法:

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

答案 2 :(得分:2)

我可以使用zip和list comprehension。

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

答案 3 :(得分:0)

以多种方式完成:

列表理解

a = [2, 4, 1, 1, 6, 1, 1, 3, 5, 1]
b = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
print [b[index] for index, item in enumerate(a) if item == 1]

使用Lambda过滤

a = [2, 4, 1, 1, 6, 1, 1, 3, 5, 1]
b = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
print filter(lambda index, item: len(a) > index and a[index]==1, enumerate(b))

请注意,列表理解会更快,因为它的长度只有a而不是列表b,以防b更大。