我有多个列表,每个列表包含数组,我想获取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
我只想返回两个列表中出现的数组数。
对我有什么建议...
答案 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