在Python中比较列表以检测相等性。

6

首先,我是一名 Python 编程的新手,尝试在其他问题中进行了大量研究,但没有找到与此类似的内容(所有其他问题都有点过于高级了)--- 话说回来。

所需解决方案: 遍历两个整数列表并比较它们是否相等。理想情况下,我希望它可以持续遍历列表,直到出现相等的情况(在展示代码后会更多地介绍此内容)。数字将在 list2 中重复生成,直到出现相等的情况。

代码说明: 我有两个通过随机数生成的列表,这些列表大小不相等。list1 有500个条目,而 list2 将具有不同数量,从1到100不等。

#current attempt to figure out the comparison. 
if (list1 = list2):
     print(equalNumber)

也许我对循环不是很了解,但我希望它可以循环遍历列表,我真的不知道从哪里开始。也许我没有像for循环或while循环一样使用循环? 这是我的数字生成器:
    for i in range(0,500):
          randoms = random.randint(0,1000)
          fiveHundredLoop.append(randoms)

第二种方法可以实现一些功能,但仅在1到100之间有不同的条目。{我可以自己解决这个问题}

你的意思是想找出这两个列表之间是否至少有一个共同成员吗? - Tim Pietzcker
@TimPietzcker 是的,我想找到至少一个共同成员,然后继续进行程序的其余部分。 - Bain
顺序重要吗?如果随机列表是[1,2,3,...][2],是否应该匹配(因为2是一个共同元素),还是不匹配(因为2在每个列表中的位置不同)? - DSM
4个回答

8

你的问题有几种可能的解释。

1)对列表进行成对循环,当一对相等时停止:

>>> s = [10, 14, 18, 20, 25]
>>> t = [55, 42, 18, 12, 4]
>>> for x, y in zip(s, t):
        if x == y:
            print 'Equal element found:', x
            break


Equal element found: 18

2) 遍历一个列表,当任何一个元素等于第一个列表中的其他任何元素时停止。这是使用集合很有用的情况(它们可以进行快速成员测试):

>>> s = {18, 20, 25, 14, 10}
>>> for x in t:
        if x in s:
            print 'Equal element found', x
            break


Equal element found 18

3)遍历两者并逐个比较它们的值:

>>> s = [10, 14, 18, 20, 25]
>>> t = [55, 42, 18, 12, 4]
>>> [x==y for x, y in zip(s, t)]
[False, False, True, False, False]

你认为在你的第二个版本中,我的生成器能够生成一个集合吗?还是它已经在生成一个集合了?(有点困惑) - Bain
是的,您可以使用类似于“set(list1)”的方式从列表中创建一个集合。在Python中,“generate”的含义有特殊意义,不适用于此处。 - Raymond Hettinger

6

这是集合的工作:

>>> l1 = [1,2,3,4,5]
>>> l2 = [5,6,7,8,9]
>>> set(l1) & set(l2)
{5}

所以我只需要使用 set(list1) & set(list2) 就可以将它们进行比较了吗?如果 list2 会生成另一个数并运行主动检查直到找到一个数,该怎么办? - Bain
1
@Bain:不太清楚你所说的“list2 is going to be generating...”是什么意思 - 列表并不会生成任何东西。如果你的意思是list2可能会增长,并且你想在每次更改list2后检查list1中是否有重复项,那么以下做法可能更合理:a) 预先将list1转换为一个集合(set),b) 将你计划添加到list2中的新元素与set1进行比较 (if new_item in set1:)。 - Tim Pietzcker
我的意思是list2将会像我的代码中的数字生成器一样工作。那么,每次在list2中进行新的随机生成后,我需要将list2转换为一个集合,然后执行set(l1)&set(l2)来进行比较吗? - Bain
@Bain:你看了我的上一条评论吗?无论任务是什么(你并没有真正解释你想要实现什么),看起来列表可能不是正确的工具。 - Tim Pietzcker

3
如果您不想使用 set
a = [1,2,3]
b = [3,2,4,5]
c = [i for i in a if i in b]

谢谢ThaiTran,但我认为set可以解决我的问题。以前不知道有set这个函数。 - Bain

0
假设有两个列表,list1和list2。 list1包含500个条目,值从0到1000,来自随机生成器代码。 list2有x个条目,其中x不是500。它可以多于500或少于500。根据问题描述不清,并且值的范围在1到100之间。
// This will return the matching one.  
set(list1).intersection(set(list2))

不,值不会是1到100,列表中将有1到100个条目。(list2) - Bain

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