繁体   English   中英

列表比较元素的python列表

[英]python list of list comparing elements

我想比较列表的元素。 我从文本文件中解析了数据,但无法比较列表。

这些是我解析文本文件后得到的列表:

[['Detected', '1', '-9.5', 'S19960'],['Active', '3', '-14.3', 'S19966'],
['Detected', '10788', '-10.5', 'S19961']]

[['Active', '2', '-16.3', 'S15620'],['Monitored', '2', '-18.2', 'S15629'],
 ['Detected', '2', '-8.8', 'S1003H'], ['Detected', '2', '-10.3', 'S02965'],
 ['Detected', '2', '-6.3', 'S56615'], ['Detected', '2', '-20.8', 'S10105'],
 ['Active', '2', '-20.8', 'S06940'], ['Detected', '2', '-17.8', 'S52835'],
 ['Detected', '2', '-20.8', 'S5198E'], ['Detected', '2', '-21.2', 'S56749'],
 ['Serving', '2', '-12.2', 'S02035'], ['Monitored', '2', '-24.5', 'S04919']]

该代码将查找Detected元素并检查 -9.5(列表的第二个元素)是否大于 -12。 如果它更大,它将检查ActiveServings元素。

例如-9.5 > -14.3 ,如果差值大于 3,则输出将针对第一个列表:

S19960 > S19966 | S19961 > S19966

对于第二个列表:

S1003H > S15620,S06940,S02035 | S56615 > S15620,S06940,S02035

这是一个工作实现,它首先找到相关Detected元素(值大于 -12)和要比较的元素( ActiveServing元素)的索引。 然后它使用这些索引来解析和比较列表中的值并生成一个输出字符串:

def comparisonFromList(data):

    # find indexes of Detected elements with value > -12
    detected = [i for i in range(len(data)) if data[i][0] in ['Detected'] and float(data[i][2]) > -12]

    # find indexes of Active and Serving elements
    tocompare = [i for i in range(len(data)) if data[i][0] not in ['Detected','Monitored']]

    output = ""
    for i,detect in enumerate(detected):
        if i > 0:
            output += ' | '
        output += data[detect][3];
        output += ' > '
        for j,compare in enumerate(tocompare):
            if abs(float(data[detect][2]) - float(data[compare][2])) > 3:
                if 0 < j:
                    output += ','
                output += data[compare][3];

    return output

输出(基于您提供的两个输入列表):

> print(comparisonFromList(list1))
S19960 > S19966 | S19961 > S19966

> print(comparisonFromList(list2))
S1003H > S15620,S06940,S02035 | S02965 > S15620,S06940 | S56615 > S15620,S06940,S02035

演示: https : //repl.it/@glhr/55562796

暂无
暂无

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

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