![](/img/trans.png)
[英]Fastest way of finding common elements between two list of lists in python
[英]Finding the common item between two list in python
大家好,我在过去的测试问题上需要帮助。 基本上给了我两个对象列表,并且我想找到出现在第一个列表和第二个列表相同位置的项目数。 我有一个例子。
>>> commons(['a', 'b', 'c', 'd'], ['a', 'x', 'b', 'd'])
2
>>> commons(['a', 'b', 'c', 'd', 'e'], ['a', 'x', 'b', 'd'])
2
我在写代码时遇到麻烦。 我们的课使用的是python3。我不知道从哪里开始编写。 这是一门第一年的编程课程,我一生中从未做过编程。
我认为更简单的解决方案是:
def commons(L1,L2):
return len([x for x in zip(L1,L2) if x[0]==x[1]])
对于初学者来说,这不是一个简单的问题。 一种更直接的方法是使用诸如sum
和zip
类的函数,并具有如下列表理解功能:
def commons(L1, L2):
return sum(el1 == el2 * 1 for el1, el2 in zip(L1, L2))
初学者采用的更典型但容易出错的方法是:
def commons(L1, L2):
count = 0
for i, elem in enumerate(L2):
if elem == L1[i]:
count += 1
return count
我说这更容易出错,因为有更多部分需要纠正。
不使用enumerate
您可以执行以下操作:
def commons(L1, L2):
count = 0
for i, range(len(L2)):
if L1[i] == L2[i]:
count += 1
return count
但是前两个仅在len(L2) <= len(L1)
。 明白我的意思是更容易出错吗? 要解决此问题,您需要执行以下操作:
def commons(L1, L2):
count = 0
for i, range(min(len(L2), len(L1))):
if L1[i] == L2[i]:
count += 1
return count
似乎这样可以工作:
def commons(l1, l2):
return sum(1 for v1,v2 in map(None, l1,l2) if v1 == v2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.