在Python中比较列表
假设我有两个列表,list1 = [1,2,3,4]
和 list2 = [5,6,7,8]
。我想把第一个列表中的第一个元素1
和第二个列表中的第一个元素5
进行比较。接着再比较2
和6
,3
和7
,依此类推。
我想用一个循环来实现这个比较,但我不太确定该怎么做。我明白使用for x in list1
只是检查列表list1
中的每一个元素x
,但我不知道如何像我描述的那样同时比较两个列表。
3 个回答
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]
这个代码会生成一个布尔值列表,显示两个列表中相同位置的元素是否相等。
另外,如果你使用 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]
这在你需要修改原始列表的同时,还要以某种方式比较相同位置的元素时,会很有用。
5
默认的比较操作符是按照字典顺序来比较列表的。这意味着你可以这样说:
>>> [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]
8
你可以同时遍历两个列表,使用一个叫做zip的函数:
for (x, y) in zip(list1, list2): do_something
这个'zip'函数会给你一个这样的结果:[(1,5), (2,6), (3,7), (4,8)]
,所以在第N次循环中,你会得到每个列表的第N个元素。