如何在Python中比较两个列表?

61

如何在Python中比较两个列表?

date = "Thu Sep 16 13:14:15 CDT 2010" 
sdate = "Thu Sep 16 14:14:15 CDT 2010" 
dateArr = [] dateArr = date.split() 
sdateArr = [] sdateArr = sdate.split() 

现在我想比较这两个列表。我猜split会返回一个列表。在Java中我们可以像这样进行简单的比较:dateArr[i] == sdateArr[i],但是在Python中应该如何实现呢?


顺便提一下,如果你想处理时间而不是通用的字符串列表,你可能会发现datetime类型很方便。 - Muhammad Alkarouri
6个回答

124

你可以直接这样做:

a=[1,2,3]
b=['a','b']
c=[1,2,3,4]
d=[1,2,3]

a==b    #returns False
a==c    #returns False
a==d    #returns True

38
a = ['a1','b2','c3']
b = ['a1','b2','c3']
c = ['b2','a1','c3']

# if you care about order
a == b # True
a == c # False

# if you don't care about order AND duplicates
set(a) == set(b) # True
set(a) == set(c) # True

通过将abc转换为一个集合,您可以删除重复项且顺序不重要。与比较列表相比,比较集合也更快且更有效率。

7
将数组转换为集合是不正确的 - 这将抛出重复项,不仅会移除顺序。尝试将数组[1,2]和[1, 1, 2, 2, 2]与集合进行比较。 - Denis Barmenkov
@DenisBarmenkov,我看不出问题。你能指出问题吗?Python repl:>>> set([1,2]) == set([1,1,2,2,2])得到的结果是True - Steven Lu
1
集合包含唯一的数字,但列表具有顺序。[1,2] 不等于 [2,1]。或者我们需要更改话题问题。另外,您可以查看点赞计数:/ - Denis Barmenkov

5

如果你是指列表,可以尝试使用==

l1 = [1,2,3]
l2 = [1,2,3,4]

l1 == l2 # False

如果您指的是array(数组),请参考相关文档
l1 = array('l', [1, 2, 3])
l2 = array('d', [1.0, 2.0, 3.0])
l1 == l2 # True
l2 = array('d', [1.0, 2.0, 3.0, 4.0])
l1 == l2 # False

如果您想比较字符串(根据您的评论):
date_string  = u'Thu Sep 16 13:14:15 CDT 2010'
date_string2 = u'Thu Sep 16 14:14:15 CDT 2010'
date_string == date_string2 # False

dateArray = 2010年9月16日 星期四 13:14:15 CDT - Umesh K
sdateArray = 2010年9月16日 星期四 14:14:15 CDT - Umesh K
现在这两个日期都是字符串,我将它们创建为数组,但是如何使用for循环进行比较呢? - Umesh K
@Umesh - 请发布您创建这两个字符串的代码,否则我们所有人都只是在猜测您想要做什么。 - Dominic Rodger
2
@Umesh Kacha:向上滚动并查看您的问题。在它下面有几个按钮。从左边数第二个是编辑。这可以用于编辑您的问题,例如如果您想添加更多信息。 - Björn Pollex
显示剩余6条评论

4
鉴于您在评论中提供的代码,我认为您想要做以下操作:
>>> dateList = "Thu Sep 16 13:14:15 CDT 2010".split()
>>> sdateList = "Thu Sep 16 14:14:15 CDT 2010".split()
>>> dateList == sdataList
false

字符串的split方法返回一个列表。在Python中,列表与数组非常不同。==在这种情况下对两个列表进行逐元素比较,并返回它们的所有元素是否相等以及元素的数量和顺序是否相同。请阅读文档

1
for i in arr1:
    if i in arr2:
        return 1
    return  0
arr1=[1,2,5]
arr2=[2,4,15]
q=checkarrayequalornot(arr1,arr2)
print(q)
>>0

1
虽然这段代码可能回答了问题,但提供解决问题的方式和原因可以提高其长期价值。 - L_J

0
从您的帖子中我了解到您想要比较日期,而不是数组。如果是这种情况,请使用适当的对象:一个datetime对象。
请查看datetime模块的文档。日期是一个棘手的问题。使用可靠的算法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接