如何比较两个列表中某项的值和位置是否相同?Python 2.7
例如:
l1 = [a,b,c,d]
l2 = [e,b,f,g]
我想要一个方法,当它发现 b 同时在 l1 和 l2 这两个列表中,并且在这两个列表中的位置都是 [1] 时,返回 true。最好这个方法可以在 for 循环中使用,这样我就可以比较列表中的所有项目。
非常感谢 :)
5 个回答
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
的元组,乘以二后变成 (your_input, your_input)
,这就是你想要测试的内容。
或者如果你想要返回 True
,只要有任何一个满足条件:
def some_func(l1, l2):
return any(i == j for i, j in zip(l1, l2))
any
函数基本上是检查一个列表(或者在这个情况下是一个生成器)中的任何元素在布尔上下文中是否为 True
,所以在这种情况下,如果两个列表都满足你的条件,它就会返回 True
。
2
你可以这样做:
def has_equal_element(list1, list2):
return any(e1 == e2 for e1, e2 in zip(list1, list2))
这个函数会在至少有一个元素在两个列表中位置和数值都相同的时候返回 True
。即使两个列表的长度不一样,这个函数也能正常工作。如果你不想让它这样,你需要对函数进行一些调整。
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