匹配两个列表之间的元素,然后在第三个列表上使用匹配位置

时间:2018-08-21 11:01:32

标签: python list set list-comprehension

我有两个长度相同的列表。一个带有整数值,每个值对应一个二进制值。我需要将整数匹配到第三个列表,然后找到与该整数匹配的二进制值。

binary  = read_dataset(itype, 'ExSitu')      #len(binary) = 195400
id      = read_dataset(itype, 'ParticleIDs') #len(id) = 195400

id2     = read_dataset(itype, 'To_Match')    #len(id2) = 19100

所以我需要找到每个实例,其中'id2'中的值位于'id'中 到目前为止,我已经做到了:

set(id) & set(id2)

给出匹配的值。 现在,我需要使用“ id”中这些值的位置来提取“ binary”中的二进制值

例如,“ id”开始:

[183,739,172,384...]

每个位置的“二进制”中都有一个对应的值

[0, 1, 1, 0,...]

我希望收集并计算“二进制”中的1和0,但仅在“ id”中的整数与“ id2”中的整数匹配的位置进行计数。

因此对于

的“ id2”列表
[999, 998, 739, 997...]

仅匹配一个整数,“ binary”中的对应值为1。

我觉得有一种方法可以通过列表理解来实现,但是我找不到方法。您聪明的人有能力帮助您吗?

非常感谢,

汤姆

2 个答案:

答案 0 :(得分:1)

如果您对id1id2中的整数的二进制值都感兴趣,可以按照以下步骤进行操作:

binary_vals = [bin(elem) for elem in set(id) & set(id2)]

不清楚为什么要使用binary的特定二进制值,但是在这种情况下,您可以做的是

binary_vals = [binary[id.index(elem)] for elem in set(id) & set(id2)]

更新后

binary_vals = [binary[id.index(elem)] for elem in set(id) & set(id2)]
print("Zeros : {}, Ones : {}".format(binary_vals.count(0),binary_vals.count(1)))

答案 1 :(得分:0)

如果我正确理解了您的问题-您想要ID中存在ID2中值的位置列表。为此,您可以执行以下操作:-

want = [i for i,j in enumerate(id2) if j in id]