【问题标题】:Compare list in python to detect an equality比较python中的列表以检测相等性
【发布时间】:2013-01-27 18:00:32
【问题描述】:

首先,我是 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 之间的不同条目。{我可以自己处理这个}

【问题讨论】:

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

标签: python list compare


【解决方案1】:

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

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]

【讨论】:

  • 你认为在你的第二版中我的生成器可以生成一个集合吗?还是它已经生成了一个集合? (一头雾水)
  • 是的,您可以使用 set(list1) 之类的内容从列表中创建一个集合。在 Python 中,“生成”有特殊含义,此处不适用。
【解决方案2】:

这是套装的工作:

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

【讨论】:

  • 所以我可以使用 set(list1) & set(list2) 并且它会比较它们?如果 list2 将生成另一个数字并运行主动检查直到找到一个呢?
  • @Bain:不确定您所说的“list2 将要生成...”是什么意思 - 列表不会生成任何东西。如果您的意思是 list2 可能会增长,并且您想在每次更改 list2 后检查 list1 中是否存在重复项,那么 a) 提前将 list1 转换为集合 b) 检查新添加的内容可能更有意义您正计划针对 set1 (if new_item in set1:) 使用 list2。
  • 我的意思是 list2 将与我的代码中的数字生成器执行相同的操作。那么我是否需要在每次新的随机生成到 list2 之后将 list2 转换为一个集合,然后执行 set(l1)&set(l2) 进行比较?
  • @Bain:你看我之前的评论了吗?看起来列表可能不是任务的正确工具,无论任务是什么(你还没有真正解释你想要实现的目标)。
【解决方案3】:

如果你不想使用 set

a = [1,2,3]
b = [3,2,4,5]
c = [i for i in a if i in b]

【讨论】:

  • 谢谢 ThaiTran,但我认为 set 确实为我解决了这个问题。从来不知道集合。
【解决方案4】:

假设列表为 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))

【讨论】:

  • no 值不会是 1 到 100,列表中会有 1 到 100 个条目。 (list2)
猜你喜欢
  • 2012-12-26
  • 2014-07-15
  • 2015-02-26
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
相关资源
最近更新 更多