结构上的python匹配

2024-04-25 12:29:40 发布

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

我有两个相关的问题。你知道吗

首先,我有一些信息,例如:

(732, 2378) (233, 52172) 23 ['Mona'] 7 

有两个元组,两个整数和一个列表。让我们将这五项索引为x[0]:x[4]

我的第一个问题是,我可以使用什么样的数据结构来存储这些不同的项(对不起,我是python新手)。你知道吗

第二个问题是基于第一个问题。假设我有这样一个结构(现在称之为列表),我的主要目标是:

在第一个和第二个“清单”中,我有:

 x[0][1]        x[1][1]    x[3]
   V               V        V
(732, 2378) (233, 23) 23 ['jamie'] 7 
(732, 2378) (233, 43) 24 ['jamie'] 3
(732, 2378) (233, 56) 23 ['jamie'] 2

(3434, 2378) (45, 23) 23 ['hello'] 1 
(3445, 2378) (76, 43) 23 ['hello'] 2
(7834, 2378) (90, 56) 24 ['hello'] 5

我的目标是遍历这两个结构,首先在x[1][1]和x[2]上进行匹配,然后,对于每个匹配记录,找到相应的x[4],使两个列表中所有匹配项的值之和最小化。返回两个结构中的匹配项。你知道吗

在这种情况下,它应该返回: (3445,2378)(76,43)23[“你好”]2 和(732,2378)(233,43)24[“杰米”]3 因为这个匹配的总和,5,是最小值。你知道吗

我知道这有点牵扯,但我很感激任何指向正确方向的指点。谢谢!你知道吗


Tags: 信息数据结构hello目标列表记录情况整数
1条回答
网友
1楼 · 发布于 2024-04-25 12:29:40

看起来你的问题中的数据结构已经很合理了,把它们放在列表中就行了。如果使用named tuples,搜索代码的可读性会比其他代码高。有关搜索/匹配代码,请参见operator.attrgetteroperator.itemgetter。你知道吗

例如,这里有一个方便的表单来排列数据(根据数据实际代表的内容,您可以选择更好的名称):

>>> from collections import namedtuple
>>> Row = namedtuple('Row', ['Pair0', 'Pair1', 'Scalar0', 'Names', 'Scalar1'])
>>> d = [
         Row((732, 2378), (233, 23), 23, ['jamie'], 7),
         Row((732, 2378), (233, 43), 24, ['jamie'], 3),
         Row((732, 2378), (233, 56), 23, ['jamie'], 2),
         Row((3434, 2378), (45, 23), 23, ['hello'], 1),
         Row((3445, 2378), (76, 43), 23, ['hello'], 2),
         Row((7834, 2378), (90, 56), 24, ['hello'], 5),
]

List comprehensions可用于匹配/筛选步骤:

>>> # filter on x[1][5] and x[2]
>>> e = [r for r in d if r.Pair1[1]==x and r.Scalar0==23]
>>> e
[Row(Pair0=(732, 2378), Pair1=(233, 23), Scalar0=23, Names=['jamie'], Scalar1=7),
 Row(Pair0=(3434, 2378), Pair1=(45, 23), Scalar0=23, Names=['hello'], Scalar1=1)
]

我不清楚在最小化和的步骤中你想做什么,但希望这个答案足够让你更接近期望的结果:-)

相关问题 更多 >