嘿伙计我在过去的测试问题上需要帮助。基本上我给了两个对象列表,我想要找到出现在第一个列表和第二个列表的相同位置的项目数。我有一个提供的例子。
>>> commons(['a', 'b', 'c', 'd'], ['a', 'x', 'b', 'd'])
2
>>> commons(['a', 'b', 'c', 'd', 'e'], ['a', 'x', 'b', 'd'])
2
我在编写代码时遇到了麻烦。我们的班级正在使用python 3.我不知道从哪里开始写这篇文章。这是一年级的编程课程,我从未在生活中编程。
答案 0 :(得分:3)
我认为更直接的解决方案是:
def commons(L1,L2):
return len([x for x in zip(L1,L2) if x[0]==x[1]])
答案 1 :(得分: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
答案 2 :(得分:0)
似乎这样可行:
def commons(l1, l2):
return sum(1 for v1,v2 in map(None, l1,l2) if v1 == v2)