0

嘿伙计们,我在过去的测试问题上需要帮助。基本上我得到了两个对象列表,我想找到出现在第一个列表和第二个列表相同位置的项目数。我有一个提供的例子。

>>> commons(['a', 'b', 'c', 'd'], ['a', 'x', 'b', 'd'])
2
>>> commons(['a', 'b', 'c', 'd', 'e'], ['a', 'x', 'b', 'd'])
2

我在写出代码时遇到了麻烦。我们的班级正在使用 python 3。我不知道从哪里开始写这个。这是第一年的编程课程,我一生中从未做过编程。

4

3 回答 3

3

我认为更直接的解决方案是:

def commons(L1,L2):
    return len([x for x in zip(L1,L2) if x[0]==x[1]])
于 2013-07-12T01:28:28.243 回答
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
于 2013-07-11T20:34:43.430 回答
0

似乎这样会起作用:

def commons(l1, l2):
   return sum(1 for v1,v2 in map(None, l1,l2) if v1 == v2)
  • 注意:这里使用的简并形式的 map 会导致较短列表中的所有值都返回 None (因此即使 l1 和 l2 的长度不同,它也会起作用。)它假设两个列表都有值(即, L1 和 L2 不包含 None - 因为如果一个列表比另一个列表短,这将导致误报。)
于 2013-08-02T01:51:30.077 回答