繁体   English   中英

Python:将一个列表中的值与另一个列表中的值序列进行匹配

[英]Python: matching values from one list to the sequence of values in another list

真的需要帮助。 我把自己弄得乱七八糟,打了一堵砖墙。

我有两个清单。

 e_list = [('edward', '1.2.3.4.'), ('jane','1.2.3.4.'), ('jackie', '2.3.4.10.')...]

和a_list(要检查的主要列表)

 a_list = [('a', '1.2.3.'), ('b', '2.3.'), ('c', '2.3.4.')...]

我的问题:我想将e_list中数字中的数字与a_list中数字的最短序列进行匹配。 因此new_list形成如下:

 new_list = [ ('edward', '1.2.3.4', '1.2.3'), ('jane', '1.2.3.4.', '1.2.3'), ('jackie', '2.3.4.10.', '2.3.')...]

我目前所做的事情(我知道的并不多)是:

for e in e_list:
    e_key = e[1]
    for a in a_list:
        a_key = a[1]
        if a_key in e_key:
            print a_key, "in"

这样做是检查a_list的编号是否在e_list的编号中 但是它会为所有序列打印出“in”,例如,对于b和c都计算jackie,而我希望它是最短的值,b。 我现在正在努力解决下一步的问题。 任何帮助,将不胜感激。 先感谢您。

for name, digits in e_list:
    shortest = sorted([d for l, d in a_list if digits.startswith(d)], key=len)[0]
    print name, digits, shortest

首先排序a_list,然后执行循环检查。

a_list.sort(key=lambda x: x[1])
for e in e_list:
    e_key = e[1]
    for a in a_list:
        a_key = a[1]
        if a_key.startswith(e_key):
            print a_key, "in"
            break

排序后,a_list中的短数字字符串将首先出现,因此在循环中您只需要找到第一个匹配项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM