如何比较列表中的项目与另一个列表中的项目具有相同的值和位置? Python 2.7

时间:2013-01-27 00:03:09

标签: python list python-2.7

例如

l1 = [a,b,c,d]
l2 = [e,b,f,g]

当它看到b同时位于l1和l2以及两个列表中的位置[1]时返回true的方法。最好是我可以在for循环中使用的东西,以便我可以比较列表中的所有项目。

非常感谢:)

5 个答案:

答案 0 :(得分:3)

试试这段代码:

if 'b' in l1 and 'b' in l2: # Separated both statements to prevent ValueErrors
    if l1.index('b') == l2.index('b'): 
        print 'b is in both lists and same position!'

与Volatility的代码不同,任何一个列表中的长度都无关紧要。

index()函数获取字符串中元素的位置。例如,如果有:

>>> mylist = ['hai', 'hello', 'hey']
>>> print mylist.index('hello')
1

答案 1 :(得分:2)

你可以这样做:

def has_equal_element(list1, list2):
    return any(e1 == e2 for e1, e2 in zip(list1, list2))

当至少一个元素与另一个元素具有相同的值和位置时,此函数将返回True。当列表长度不同时,此功能也有效,如果不需要,您需要调整功能。

答案 2 :(得分:1)

假设列表长度相同,您可以使用zip函数

for i, j in zip(l1, l2):
    if i == j:
        print '{0} and {1} are equal and in the same position'.format(i, j)

zip函数的作用是这样的:

l1 = [1, 2, 3]
l2 = [2, 3, 4]
print zip(l1, l2)
# [(1, 2), (2, 3), (3, 4)]

如果你想要一个返回TrueFalse给定输入的函数,你可以这样做

def some_func(your_input, l1, l2):
    return (your_input,)*2 in zip(l1, l2)

(your_input,)是包含your_input的单元组,并将其乘以2会使其成为(your_input, your_input) - 这就是您要测试的内容。

或者如果你想要返回True,如果满足条件

def some_func(l1, l2):
    return any(i == j for i, j in zip(l1, l2))

any函数基本上检查列表中的任何元素(或者在这种情况下是生成器)是否在布尔上下文中是True,因此在这种情况下,如果两个列表满足,则返回true你的病情。

答案 3 :(得分:0)

如果您确实想要一种方法来比较两个列表中的一个位置,您可以使用以下内容:

def compare_pos(l1, l2, pos):
    try:
        return l1[pos] == l2[pos]
    except IndexError:
        return False

l1 = [0, 1, 2, 3]
l2 = [0, 2, 2, 4]

for i, _ in enumerate(l1):
    print i, compare_pos(l1, l2, i)

# Output:
# 0 True
# 1 False
# 2 True
# 3 False

如果你想测试两个列表是否在相同的位置具有所有相同的元素,你可以检查是否相等:

print l1 == l2

答案 4 :(得分:0)

我会从两个列表中得到共同的元素:

l1 = [a, b, c, d]
l2 = [e, b, f, g]
common_elements = [(i, v) for i,v in enumerate(l1) if l2[i] == v]

这将创建一个元组列表:(index, value),然后您可以检查列表中是否包含所需的值或索引。