2

例如。

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

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

非常感谢 :)

4

5 回答 5

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
于 2013-01-27T00:06:58.767 回答
2

你可以做:

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

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

于 2013-01-27T00:08:24.350 回答
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。

于 2013-01-27T00:05:34.810 回答
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
于 2013-01-27T00:06:43.557 回答
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)然后您可以检查您想要的值或索引是否在列表中。

于 2013-01-27T00:08:36.443 回答