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

Python 匹配两个列表之间的元素,然后使用第三个列表中匹配项的位置,python,list,set,list-comprehension,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) = 19

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

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'中的二进制值

[0, 1, 1, 0,...]
例如,“id”开始于:

[183,739,172,384...]
每个位置都有一个对应的“二进制”值

[0, 1, 1, 0,...]
我希望收集并计算“二进制”中的1和0,但仅限于“id”中的整数与“id2”中的整数匹配的位置

所以对于“id2”列表

[999, 998, 739, 997...]
只有一个整数匹配,“二进制”中的对应值为1

我觉得有一种方法可以通过理解列表来做到这一点,但我找不到方法。你们这些聪明的人能帮忙吗

非常感谢,


Tom

如果您对
id1
id2
中整数的二进制值感兴趣,可以按如下方式进行操作:

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

如果我正确理解了您的问题-您需要一个id2中存在于id中的值的位置列表。为此,您可以执行以下操作:-

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

如果您对与整数对应的二进制值感兴趣,为什么不直接执行
binaries=[bin(elem)for elem in set(id)&set(id2)]
?有理由得到二进制中的值吗?啊,谢谢,但我只对“id”位置上的二进制值感兴趣,这些二进制值与“id2”中的值相匹配。谢谢你的回复!你能展示一下输入和相应输出的小例子吗?我已经更新了我的问题,包括这个,谢谢!啊,我明白你的意思,但这不是我想要的。这是我不清楚的过错。“二进制”列表是1或0值的列表。我需要计算与列表“id”中相同列表位置中的整数对应的1和0的数量。但仅限于“id2”中的整数。我建议您使用二进制、id1和id2的输入以及预期的输出编辑问题。我已根据其他详细信息更新了答案。