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

2024-04-25 04:57:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两张同样长的单子。一个是整数值,每个值对应一个二进制值。我需要将整数与第三个列表匹配,然后找到与该整数匹配的二进制值。你知道吗

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,...]

我希望收集并计算“binary”中的1和0,但仅限于“id”中的整数与“id2”中的整数匹配的位置。你知道吗

所以对于“id2”列表

[999, 998, 739, 997...]

只有一个整数匹配,“binary”中的对应值为1。你知道吗

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

非常感谢

汤姆


Tags: 方法id列表readlen二进制整数dataset
2条回答

如果我正确理解了你的问题-你想要一个id2中的值的位置列表,这些值在id中存在下图:-你知道吗

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

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

相关问题 更多 >