在Python

时间:2018-04-03 02:12:00

标签: python python-3.x list networkx

我有一个数字列表

N = [13, 14, 15, 25, 27, 31, 35, 36, 43]

经过一些计算后,对于N中的每个元素,我得到以下列表作为答案。

ndlist = [4, 30, 0, 42, 48, 4, 3, 42, 3]

也就是说,对于N中的第一个索引(即13),我的答案是ndlist中的4。

对于N中的某些索引,我在ndlist中得到了相同的答案。例如,当N= 1331时,答案在ndlist中为4

我需要找到N中的数字(在我的示例中为13和31),以便它们在ndlist中具有相同的答案。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

您可以使用defaultdict并将其放入由答案键入的列表中:

代码:

N = [13, 14, 15, 25, 27, 31, 35, 36, 43]
ndlist = [4, 30, 0, 42, 48, 4, 3, 42, 3]

from collections import defaultdict
answers = defaultdict(list)
for n, answer in zip(N, ndlist):
    answers[answer].append(n)

print(answers)
print([v for v in answers.values() if len(v) > 1])

结果:

defaultdict(<class 'list'>, {4: [13, 31], 30: [14], 
            0: [15], 42: [25, 36], 48: [27], 3: [35, 43]})

[[13, 31], [25, 36], [35, 43]]

答案 1 :(得分:1)

这是一种仅使用嵌套列表理解的方法:

[N[idx] for idx, nd in enumerate(ndlist) if nd in [i for i in ndlist if ndlist.count(i)>1]]

#[13, 25, 31, 35, 36, 43]

解释:内部列表理解([i for i in ndlist if ndlist.count(i)>1])获取ndlist中的所有重复值,列表理解的其余部分提取N中找到这些值的相应值在ndlist