如何使用另外两个列表有条件地从列表中提取值?

时间:2014-01-28 23:26:57

标签: python list python-2.7

我有三个列表如下:

a = [2, 1, 3, 5, 4]
b = [3, 3, 4, 4, 6]
c = [1983, 2401, 852, 2442, 5035]

我用过:

x = [x for x in a if x in b]

从列表a给我[3,4]。我需要列表c中相应的值[852,5035]。任何的意见都将会有帮助。

1 个答案:

答案 0 :(得分:1)

x = [c_val for a_val, c_val in zip(a, c) if a_val in b]

使用zip获取与c的每个元素对应的a元素。请注意,如果b较大,最好使用setin的速度要快得多:

b_set = set(b)
x = [c_val for a_val, c_val in zip(a, c) if a_val in b_set]

不要将set调用放入列表理解中;这会在每次迭代时重新计算集合,从而破坏任何性能优势。