如何比较两个列表并计算另一个列表的对象

时间:2017-01-22 17:40:05

标签: python list count compare

如果我有两个清单 一个名为" base"并用于分解另一个列表 另一个是"匹配" 如下所示

base = [4,7,13,14,19]
match = [1,2,5,9,10,12,15,18]

我想算一下"匹配的数量"在" base"的两个对象内,并存储在另一个列表中,称为"结果" 所以"结果"应该是[1,3,0,2]

我用这种方式

fianl_num = [] 
m = 0
countnum = 0
for j in match:
    if j < base[m]:
        countnum += 1
    else:
        m = m+1
        fianl_num.append(countnum)
        countnum = 0
print(fianl_num)`    

然而,存在一个问题,如果匹配对象大于基础对象,则当前匹配对象将被视为其他对象并继续比较下一个匹配&#39; s反对下一个基地的对象。结果,当前基础对象被跳过

我的例子/ base = [4,7,13,14,19] / match = [1,2,5,9,10,12,15,18] 我的代码结果为[2,0,2,0] 因为5大于4,所以它继续比较9到7,跳过比较5到7的过程

4 个答案:

答案 0 :(得分:1)

使用sum()确定matchii+1元素之间base中元素的数量。

for i in range(len(base)-1):
    count=sum(base[i]<x<base[i+1]for x in match)
    l.append(count)

输出:

[1,3,0,2]

答案 1 :(得分:0)

可以有更好的方法。但是1种方式可以是这样的:

base = [4,7,13,14,19]
match = [1,2,5,9,10,12,15,18]
l = []
i = 0
while i < len(base)-1:
    count = 0
    for a in match:
        if base[i] < a < base[i+1]:
            count += 1
    l.append(count)
    i += 1
print l

输出:

[1, 3, 0, 2]

答案 2 :(得分:0)

这个怎么样?

None

答案 3 :(得分:0)

我认为单行列表理解比问题描述更容易理解:

base = [4,7,13,14,19]
match = [1,2,5,9,10,12,15,18]

[sum(1 for e in match if lower < e < upper) for lower, upper in zip(base, base[1:])]

Out[7]: [1, 3, 0, 2]
如果你对bool(True = 1False = 0的总和没有问题,那么

可以缩短几个字符,就像Trelzevir的回答一样

[sum(lower < e < upper for e in match) for lower, upper in zip(base, base[1:])]

较旧的python版本可能需要额外的大括号才能将sum的arg识别为生成器