如何相互检查两个列表?

时间:2017-04-27 01:51:25

标签: python

如果我有两个列表,我希望能够看到一个列表中的项目是否与另一个列表进行比较。例如,如果我有list1=[1,2,3]list2=[2,3,5,1],我希望能够查看列表2中的数字是否与列表1匹配,而不是它们的顺序相同,即使还有其他数字。当你有两组数字并且必须得到它们的交集时,有点像数学。有没有办法看看list2是否包含list1中的所有项目而不管订单或其他数字?我根据列表是否与其他列表等效,然后将变量更改为" true"。

将if用于if命令以检测某些内容是否为真。

这是一个类似于我试图开始工作的代码的例子。

listOne=[]
listRight=[1,2,5]

right="false"
while(win != "true"):

  option=input("What number would you like to add to list one?")
    if(option=="1"):
        listOne.append(1)
    elif(option=="2"):
        listOne.append(2)

  if(listOne==listRight):
    right="true"

感谢您的帮助。

注意:我的列表中没有任何重复项。一个将是3个数字的列表,即[1,4,7]另一个列表将是0到9的任何数字,仅使用数字1-9。我希望能够检查所有3个数字是否在第二个列表中的任何位置,无论是否有额外的数字。就像是[1,5,9]是第一个列表而[7,1,3,6,9,5]是第二个列表一样,它们会回归真实,它们彼此相等。

3 个答案:

答案 0 :(得分:5)

是的,使用套件

>>> list1=[1,2,3]
>>> list2=[2,3,5,1]
>>> set(list1) & set(list2) # intersection
{1, 2, 3}
>>> set(list1) | set(list2) # union
{1, 2, 3, 5}
>>> set(list1) - set(list2) # set difference
set()
>>> set(list2) - set(list1) # set difference
{5}
>>> set(list1) ^ set(list2) # symmetric difference
{5}
>>>

子集关系:

>>> set(list1) < set(list1) # proper subset with <
False
>>> set(list1) < set(list1)
False
>>> set(list1) < set(list2)
True
>>> set(list1) <= set(list1) # normal subset
True
>>>

答案 1 :(得分:3)

Python有set类型,您可以使用a <= b(或不太可读的b.issubset(a))来检查ab的子集

一些示例({a, b, c}set([a, b, c]))的简写:

>>> {1, 2} <= {1, 2, 3}
True

>>> {2, 1, 5} <= {1, 5, 2}
True

>>> set() <= {0}
True

>>> {1, 2, 4} <= {1, 2, 5}
False

在您的代码中使用:

attempt = set()
right = {1, 2, 5}

while not right <= attempt:
    option = input("What number would you like to add to list one?")
    attempt.add(int(option))

答案 2 :(得分:0)

当您想要查看两个列表中的数字是否匹配时,您的意思是什么?假设<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:strip-space elements="*"/> <xsl:output indent="yes"/> <xsl:key name="kExp" match="expression" use="concat(@context, '|', normalize-space(.))"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="assignments"> <xsl:variable name="dataHandle" select="preceding-sibling::data/@handle"/> <xsl:copy> <xsl:for-each select="../descendant::expression[@context=$dataHandle and generate-id()=generate-id(key('kExp', concat(@context, '|', normalize-space(.)))[1])]"> <assignment name="{normalize-space(.)}"></assignment> </xsl:for-each> </xsl:copy> </xsl:template> </xsl:stylesheet> list1 = [1, 1],在这种情况下,您希望返回值为True吗?如果是,或者您不在乎,那么只需使用套装即可。

list2 = [1, 1, 1]

我猜你的应用程序中,你不会期望遇到重复,所以这应该是可以接受的。但是,如果您确实希望重复项想要保留它们,您可能想要从头构建一个方法,您可以对列表进行排序第一(d&#39; oh)