遍历两个包含数组的列表并返回相似数组的计数

时间:2018-07-19 09:28:56

标签: python arrays

我有多个列表,每个列表包含数组,我想获取2个列表内匹配的数组数。我发现了类似的问题,但是我尝试过的一切都没有关系。我已经尝试过以这种方式进行操作,但是我总是得到0的计数,并且我知道我应该在两个列表中至少有一个匹配的数组。

    for i in l1:
         for j in l2:
                count = 0
                if i == j:
                    count+=1 
                else:
                    pass

我也尝试过使用 set intersection 来计数相似的数组,但是没有用。为此,我还将列表中的项目更改为元组。

我还尝试将计数器= 0移到我的for循环之外,但返回此错误:

     ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

用于以下代码行:

    if i==j:

示例:

l1 = [[1.00,1.65,3.45,0.5] [1.80,1.90,3.00,0.5] [1.02,1.89,3.45,0.5] ]

l2 = [[1.35,2.00,3.60,0.7] [1.02,1.89,3.45,0.5] [2.22,1.30,3.00,0.7]

输出为:1

我只想返回两个列表中出现的数组数。

对我有什么建议...

6 个答案:

答案 0 :(得分:1)

如果您进行如下修改,您的代码将起作用:

l1 = [[1.00,1.65,3.45,0.5],[1.80,1.90,3.00,0.5],[1.02,1.89,3.45,0.5]]
l2 = [[1.35,2.00,3.60,0.7],[1.02,1.89,3.45,0.5],[2.22,1.30,3.00,0.7]]

count = 0
for i in l1:
    for j in l2:
        if i == j:
            count+=1 

Zip函数在这种情况下不起作用,因为它将比较每个参数序列中的第i个元素。例如:

[i for i, j in zip(l1, l2) if i == j]

输出

[([1.0, 1.65, 3.45, 0.5], [1.35, 2.0, 3.6, 0.7]), ([1.8, 1.9, 3.0, 0.5], [1.02, 1.89, 3.45, 0.5]), ([1.02, 1.89, 3.45, 0.5], [2.22, 1.3, 3.0, 0.7])]

什么Ev。 Kounis建议也可以:

count = sum(1 for item in l1 if item in l2)

答案 1 :(得分:1)

>>> a = [1, 2, 3, 4, 5]
>>> b = [9, 8, 7, 6, 5]
>>> set(a) & set(b)
{5}

或者简单地

>>> set(a).intersection(b)
set([5])

答案 2 :(得分:0)

可以给样本集交点吗?

这里是一个示例用法,对我有用

a = [1,2,3,4,5]
b = [4,5,6,7]
c = set(a).intersection(b)
similar_count = len(c)

我还是使用python 2.7

更新

在循环外声明变量计数

答案 3 :(得分:0)

也可以在单个循环中完成。

a = [1, 2, 3, 4, 5]
b = [9, 8, 7, 6, 5]
for number in a:
    if number in b:
        print(number)

答案 4 :(得分:0)

在两个循环外声明count = 0,因为在每次迭代之后,将count的值重置为0,然后您将其作为答案。修改代码如下:

 count=0
 for i in l1:
     for j in l2:
            if i == j:
                count+=1 
            else:
                pass

答案 5 :(得分:0)

output= [list(item) for item in (set(tuple(row) for row in l1) & set(tuple(row) for row in l2))]
print len(output)

通常,set有助于轻松找到两个集合之间的共同元素。为此,我们需要将list转换为set。由于您有list of list,因此,如果不将内部列表转换为set,就无法将其转换为tuple

示例问题的输出:

>>> l1 = [[1.00,1.65,3.45,0.5],[1.80,1.90,3.00,0.5],[1.02,1.89,3.45,0.5]]
>>> l2 = [[1.35,2.00,3.60,0.7],[1.02,1.89,3.45,0.5],[2.22,1.30,3.00,0.7]]
>>> output= [list(item) for item in (set(tuple(row) for row in l1) & set(tuple(row) for row in l2))]
>>> print output
[[1.02, 1.89, 3.45, 0.5]]
>>> print len(output)
1