例如
l1 = [a,b,c,d]
l2 = [e,b,f,g]
当它看到b同时位于l1和l2以及两个列表中的位置[1]时返回true的方法。最好是我可以在for循环中使用的东西,以便我可以比较列表中的所有项目。
非常感谢:)
答案 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)]
如果你想要一个返回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你的病情。
答案 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)
,然后您可以检查列表中是否包含所需的值或索引。