我有两个长度相同的列表。一个带有整数值,每个值对应一个二进制值。我需要将整数匹配到第三个列表,然后找到与该整数匹配的二进制值。
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。
我觉得有一种方法可以通过列表理解来实现,但是我找不到方法。您聪明的人有能力帮助您吗?
非常感谢,
汤姆
答案 0 :(得分:1)
如果您对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)))
答案 1 :(得分:0)
如果我正确理解了您的问题-您想要ID中存在ID2中值的位置列表。为此,您可以执行以下操作:-
want = [i for i,j in enumerate(id2) if j in id]