迭代迭代列表中的连接项

时间:2016-02-20 04:15:26

标签: python python-3.x

我正在尝试根据有效输出字典的键检查列表的连接内容。我想首先支持最长,最右边的比赛。作为视觉辅助,键输入字典的顺序是我希望输出更喜欢的顺序。

我觉得我差不多已经解决了问题,但是我已经搞砸了代码,因为我的大脑已经很长时间了。

编辑:septra提供了以下代码,它完成了我想要它做的90%

foo = ['1','2','3']
bar = ['1','2','2','3']
foobar = ['dog','horse']
foodbar = ['2','3','1']
valid_list = {'1 2 3':'1 2 3','2 3':'2 3','1 2':'1 2','3':'3','2':'2','1':'1'}
def validCheck(check, valid_list):
    for r in range(len(check)):
        key = " ".join(check[r:])
        if key in valid_list:
            return valid_list[key]
print(validCheck(foo, valid_list))
print(validCheck(bar, valid_list))
print(validCheck(foobar, valid_list))
print(validCheck(foodbar, valid_list))

打印

'1 2 3'
'2 3'
'None'
'1'

而不是

'1 2 3'
'2 3'
'None'
'2 3'

正如后面的评论中所说,理想情况下,它会捕获多个不重叠的有效输入,并且标准也相同,但我现在准备推迟使用该功能。在那种情况下,

validCheck(['2','3','1','2'], valid_list)

会打印

['1 2','2 3']

支持单个较长的输出而不是多个较短的输出。

1 个答案:

答案 0 :(得分:0)

这是您正在寻找的功能吗?

def validCheck(check, valid_list):
    all_keys = []
    for r in range(len(check)):
        key = " ".join(check[r:])
        revkey = " ".join(check[-r:-1])

        valid_key = []
        valid_revkey = []

        if key in valid_list:
            valid_key.append(key)
        if revkey in valid_list:
            valid_revkey.append(revkey)

        all_keys.extend(valid_key + valid_revkey)

    return max(all_keys, key=len) if all_keys else None

这应该照顾最长的>对大多数要求。