如果我有两个列表,我希望能够看到一个列表中的项目是否与另一个列表进行比较。例如,如果我有list1=[1,2,3]
和list2=[2,3,5,1]
,我希望能够查看列表2中的数字是否与列表1匹配,而不是它们的顺序相同,即使还有其他数字。当你有两组数字并且必须得到它们的交集时,有点像数学。有没有办法看看list2是否包含list1中的所有项目而不管订单或其他数字?我根据列表是否与其他列表等效,然后将变量更改为" true"。
这是一个类似于我试图开始工作的代码的例子。
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]是第二个列表一样,它们会回归真实,它们彼此相等。
答案 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)
)来检查a
是b
的子集
一些示例({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)