繁体   English   中英

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

[英]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。

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

非常感谢,

汤姆

如果您对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)))

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM