0

什么是匹配 Python 2.7 列表中不同项目的最佳方法,我有

list= [('A', 6L), ('B', 7L), ('C', 8L), ('D', 8L), ('E', 6L), ('F', 8L)]

我想匹配这样的结果

new list = ('A', 6L, 'B', 7L), ('C', 8L, 'E', 6L), ('D', 8L), ('F' 8L)] 

在这种情况下 D 和 F 中,任何不匹配的项目都位于列表的末尾。

编辑:通过匹配不同我的意思是将每个元组(例如(A,6))与另一个元组连接起来,其中元组中的第二项(例如6)不一样。所以 (A, 6 ) 和 (B, 7 ) 但不是 (A, 6 ) 和 (E, 6 )

4

2 回答 2

0

如果您想最大化匹配数(与示例不同),您可以对列表进行排序并从两端匹配项目。

import operator
oldlist = [('A', 6L), ('B', 7L), ('C', 8L), ('D', 8L), ('E', 6L), ('F', 8L)]
newlist = []

oldlist.sort(key=operator.itemgetter(1))
while oldlist and oldlist[0][1] != oldlist[-1][1]:
    newlist.append(oldlist.pop(0) + oldlist.pop())
newlist.extend(oldlist)  #unmatched items
于 2013-04-11T19:01:36.457 回答
0

如果你没有重复,这样的事情应该可以工作:

available = set(your_original_list)
matching = []
while len(available) > 0:
    first = available.pop()
    current_set = set()
    current_set.add(first)
    for possible_match in available.copy():
        if matches(first, possible_match):
            current_set.add(possible_match)
            available.remove(possible_match)

    matching.append(current_set)

当然,实现该matches(a, b)功能取决于您。您可以matching按每个元素中集合的长度对列表进行排序。( matching.sort(lambda a,b: len(b)-len(a)))

于 2013-04-11T17:06:18.463 回答