在Python中比较列表
问题描述:
假设我有list1 = [1,2,3,4]
和list2 = [5,6,7,8]
。如何比较list1
中的第一个元素1
与第一个元素5
,list2
?并且2
与6
,3
与7
等等。在Python中比较列表
我想为此循环使用for循环,但我不知道如何去做。据我所知,做for x in list1
只是检查一个元素x
到list1中的所有元素,但我不知道如何按照我描述的方式比较两个列表。
答
您可以同时遍历两个列表使用Zip:
for (x, y) in zip(list1, list2): do_something
的“拉链”功能使您[(1,5), (2,6), (3,7), (4,8)]
,所以在循环迭代n你每个列表的第N个元素。
答
默认比较运算符按字典顺序比较列表。所以,你可以说这样的话:如果不是你要计算的elementwise比较
>>> [1, 2, 3, 4] < [5, 6, 7, 8]
True
,您可以使用map
和cmp
(或任何其他操作:
>>> map(cmp, [1, 2, 3, 4], [5, 6, 7, 8])
[-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]
,如果你需要修改原来的列表,同时还比较以某种方式相同指数的元素,这非常有用。
你在寻找什么样的比较结果?如果它是一个序列,每个项目的可能价值究竟是什么? – martineau 2010-12-08 02:29:37