说我有list1 = [1,2,3,4]
和list2 = [5,6,7,8]
。如何将1
中的第一个元素list1
与5
中的第一个元素list2
进行比较? 2
6
,3
7
,等等。
我正在尝试使用for循环,但我不知道该怎么做。我理解做for x in list1
只是检查一个元素x
到list1中的所有元素,但我不知道如何按照我描述的方式比较两个列表。
答案 0 :(得分:8)
您可以使用zip:
同时遍历两个列表for (x, y) in zip(list1, list2): do_something
'zip'函数为您提供[(1,5), (2,6), (3,7), (4,8)]
,因此在循环迭代N中,您将获得每个列表的第N个元素。
答案 1 :(得分: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]
答案 2 :(得分: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]
这将生成一个bool列表,显示两个列表中相同索引的项是否彼此相等。
此外,如果您使用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]
如果您需要修改原始列表,同时还要以某种方式比较同一索引的元素,这可能很有用。