在Python中比较列表

3 投票
3 回答
1229 浏览
提问于 2025-04-16 08:12

假设我有两个列表,list1 = [1,2,3,4]list2 = [5,6,7,8]。我想把第一个列表中的第一个元素1和第二个列表中的第一个元素5进行比较。接着再比较2637,依此类推。

我想用一个循环来实现这个比较,但我不太确定该怎么做。我明白使用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

如果你想逐个元素进行比较,可以使用 mapcmp(或者其他任何操作符):

>>> 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个元素。

撰写回答