2010-12-07 158 views
3

假设我有list1 = [1,2,3,4]list2 = [5,6,7,8]。如何比较list1中的第一个元素1与第一个元素5list2?并且26,37等等。在Python中比较列表

我想为此循环使用for循环,但我不知道如何去做。据我所知,做for x in list1只是检查一个元素x到list1中的所有元素,但我不知道如何按照我描述的方式比较两个列表。

+0

你在寻找什么样的比较结果?如果它是一个序列,每个项目的可能价值究竟是什么? – martineau 2010-12-08 02:29:37

回答

8

您可以同时遍历两个列表使用Zip:

for (x, y) in zip(list1, list2): do_something 

的“拉链”功能使您[(1,5), (2,6), (3,7), (4,8)],所以在循环迭代n你每个列表的第N个元素。

5

默认比较运算符按字典顺序比较列表。所以,你可以说这样的话:如果不是你要计算的elementwise比较

>>> [1, 2, 3, 4] < [5, 6, 7, 8] 
True 

,您可以使用mapcmp(或任何其他操作:

>>> map(cmp, [1, 2, 3, 4], [5, 6, 7, 8]) 
[-1, -1, -1, -1] 
1

如果您的结果将是一个新的列表,那么你可以使用列表理解:

new_list = [ some_function(i, j) for i, j in zip(list1, list2) ] 

下面是上面代码的一个真实的例子:

>>> list1 = [1, 2, 3, 4] 
>>> list2 = [1, 3, 4, 4] 
>>> like_nums = [ i == j for i, j in zip(list1, list2) ] 
>>> print like_nums 
[True, False, False, True] 

这将制作一个bools列表,显示两个列表中相同索引的项目是否彼此相等。

此外,如果您使用zip函数,则可以在完成操作后解压缩结果。具体方法如下:

>>> list1 = [1, 2, 3, 4] 
>>> list2 = [1, 3, 4, 4] 
>>> new_list = zip(list1, list2)   # zip 
>>> print new_list 
[(1, 1), (2, 3), (3, 4), (4, 4)] 
>>> newlist1, newlist2 = zip(*new_list) # unzip 
>>> print list(newlist1) 
[1, 2, 3, 4] 
>>> print list(newlist2) 
[1, 3, 4, 5] 

,如果你需要修改原来的列表,同时还比较以某种方式相同指数的元素,这非常有用。