![](/img/trans.png)
[英]Returning string matches between two lists for a given number of elements in a third list
[英]Match elements between two lists, then use position of matches on third list
我有两个长度相同的清单。 一个带有整数值,每个值对应一个二进制值。 我需要将整数匹配到第三个列表,然后找到与该整数匹配的二进制值。
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。
我觉得有一种方法可以通过列表理解来实现,但是我找不到方法。 您聪明的人有能力帮助您吗?
非常感谢,
汤姆
如果您对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)))
如果我正确理解了您的问题,则需要ID中存在ID2中的值的位置列表。 为此,您可以执行以下操作:
want = [i for i,j in enumerate(id2) if j in id]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.