例如。
l1 = [a,b,c,d]
l2 = [e,b,f,g]
当它看到 b 在 l1 和 l2 中,并且在两个列表中的位置 [1] 时,将返回 true 的方法。最好是我可以在 for 循环中使用的东西,以便我可以比较列表中的所有项目。
非常感谢 :)
例如。
l1 = [a,b,c,d]
l2 = [e,b,f,g]
当它看到 b 在 l1 和 l2 中,并且在两个列表中的位置 [1] 时,将返回 true 的方法。最好是我可以在 for 循环中使用的东西,以便我可以比较列表中的所有项目。
非常感谢 :)
试试这个代码:
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
你可以做:
def has_equal_element(list1, list2):
return any(e1 == e2 for e1, e2 in zip(list1, list2))
True
当至少一个元素具有与另一个列表中相同的值和位置时,此函数将返回。当列表长度不同时,此功能也有效,如果不需要,您需要调整该功能。
假设列表的长度相同,您可以使用该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)]
如果你想要一个返回True
或False
给出输入的函数,你可以这样做
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。
如果您确实想要一种方法来比较两个列表中的一个位置,您可以使用以下方法:
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
我会从两个列表中得到共同的元素:
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)
然后您可以检查您想要的值或索引是否在列表中。