gpt4 book ai didi

python - 来自不同数字列表的第一个公共(public)元素

转载 作者:行者123 更新时间:2023-11-28 22:43:29 25 4
gpt4 key购买 nike

我正在尝试从例如5 个单独的号码列表。 例如5个数字列表是这些:

list_1 = [13579875, 25732, 3541, 56732, 1567, 20546, 10, 68971]
list_2 = [1856721, 25724, 3541, 56732, 1567, 20546, 10, 68971]
list_3 = [2354074, 25732, 3541, 56732, 1567, 20546, 10, 68971]
list_4 = [533878, 651, 658, 8654,1357, 1254, 9, 68971]
list_5 = [567432, 25732, 3541, 56732, 1567, 20546, 10, 68971]

所以最终,我想一次获取一对列表并检查他们的 FCN 是什么。在我看来,我需要找到第一场比赛的索引。所以在 list_1 和 list_2 之间,FCN 是 3541(list_1 的索引 2 和 list_2 的索引 2)。然后我必须比较 list_1 和 list_3 并找到它们的 FCN,即 25732。在任何时候,我都必须记住比较列表对的 FCN。构建显示数字关联的树的最终目的。然后,在将 list_1 与直到 list_5 的所有列表进行比较之后,我将开始将 list_2 与所有其他列表进行比较,直到完成所有可能的比较。

我想过用两个 for 循环来解决它,但我无法将它们组合成一个函数。这就是我的全部:

compare_lists = []
for i in list_1:
if i in list_2:
compare_lists.append(1)
else:
compare_lists.append(0)
print compare_lists

对于我找到 FCN 索引的部分,我有这个:

indexFCN_a = ""
indexFCN_b = ""
for a in list_1:
if a in list_2:
indexFCN_a = list_1.index(a)
indexFCN_b = list_2.index(a)
print indexFCN_a
break

显然,我的主要问题之一是这些需要在一个函数中,我不太确定如何正确地做到这一点。我试过了,但它不完全是应该的是。 你能在函数中给出答案吗?如有任何帮助,我们将不胜感激。

我相信这项任务可以更有效地解决,所以如果您有任何想法,请分享。请记住,最终目的是为每次比较存储 FCN,以构建显示数字关联的树。

请参阅评论以获得进一步的解释。另外:我怎么能跟踪一个元素是 FCN 的次数?所以这个问题的预期输出是:3541 - 3 次,25732 - 3 次,68971 - 4 次。

最佳答案

您可以使用 itertools.combination 获取所需的对并使用 izip 压缩您的列表并比较同一索引中的元素。

还有一种更优雅的方式,您可以将列表放入字典中,如下所示:

d={
'list_1':[13579875, 25732, 3541, 56732, 1567, 20546, 10, 68971],
'list_2' : [1856721, 25724, 3541, 56732, 1567, 20546, 10, 68971],
'list_3' : [2354074, 25732, 3541, 56732, 1567, 20546, 10, 68971],
'list_4' : [533878, 651, 658, 8654,1357, 1254, 9, 68971],
'list_5' : [567432, 25732, 3541, 56732, 1567, 20546, 10, 68971]}

names=['list_1','list_2','list_3','list_4','list_5']
from itertools import combinations,izip
for i,j in combinations(names,2):
for k,t in izip(d[i],d[j]):
if k==t:
print (i,j),'value:{}-index:{}'.format(k,d[i].index(k))
break

结果:

('list_1', 'list_2') value:3541-index:2
('list_1', 'list_3') value:25732-index:1
('list_1', 'list_4') value:68971-index:7
('list_1', 'list_5') value:25732-index:1
('list_2', 'list_3') value:3541-index:2
('list_2', 'list_4') value:68971-index:7
('list_2', 'list_5') value:3541-index:2
('list_3', 'list_4') value:68971-index:7
('list_3', 'list_5') value:25732-index:1
('list_4', 'list_5') value:68971-index:7

注意:zip 函数将为您提供给定可迭代对象的列,例如,itertools.izip 类似于 zip 但它返回一个列而不是列表的生成器:

>>> l1=['a','b','c']
>>> l2=[1, 2, 3]
>>> zip(l1,l2)
[('a', 1), ('b', 2), ('c', 3)]

所以经过长时间的讨论,如果你想获得相同元素的数量,你可以使用 collections.Counter 并使用 Counter.most_common(N) 来获得最多N个常见项目:

d={
'list_1':[13579875, 25732, 3541, 56732, 1567, 20546, 10, 68971],
'list_2' : [1856721, 25724, 3541, 56732, 1567, 20546, 10, 68971],
'list_3' : [2354074, 25732, 3541, 56732, 1567, 20546, 10, 68971],
'list_4' : [533878, 651, 658, 8654,1357, 1254, 9, 68971],
'list_5' : [567432, 25732, 3541, 56732, 1567, 20546, 10, 68971]}

names=['list_1','list_2','list_3','list_4','list_5']
from itertools import combinations
from collections import Counter
CNT=Counter()
for i,j in combinations(names,2):
for k,t in zip(d[i],d[j]):
if k==t:
CNT.update([k])
break
print CNT
print CNT.most_common(1)

结果:

Counter({68971: 4, 25732: 3, 3541: 3})
[(68971, 4)]

如果你不希望不同索引中的相等元素而是拳头匹配,你可以使用以下代码:

d={
'list_1':[13579875, 25732, 3541, 56732, 1567, 20546],
'list_2' : [1856721, 25724, 56732,3541, 1567, 20546,3541, 10, 68971],
'list_3' : [2354074, 25732, 3541, 56732, 1567, 20546, 10, 68971],
'list_4' : [533878, 651, 658, 8654,1357, 1254],
'list_5' : [567432, 25732, 3541, 56732, 20546, 10, 68971]}

names=['list_1','list_2','list_3','list_4','list_5']
from itertools import combinations,izip
for i,j in combinations(names,2):
for ind,k in enumerate(d[i]):
if k in d[j]:
print (i,j),'value:{}-index for {}:{},index for {}:{}'.format(k,i,ind,j,d[j].index(k))
break

结果:

('list_1', 'list_2') value:3541-index for list_1:2,index for list_2:3
('list_1', 'list_3') value:25732-index for list_1:1,index for list_3:1
('list_1', 'list_5') value:25732-index for list_1:1,index for list_5:1
('list_2', 'list_3') value:56732-index for list_2:2,index for list_3:3
('list_2', 'list_5') value:56732-index for list_2:2,index for list_5:3
('list_3', 'list_5') value:25732-index for list_3:1,index for list_5:1
[Finished in 0.7s]

关于python - 来自不同数字列表的第一个公共(public)元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30694593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com