搜索列表中的精确匹配

0 投票
3 回答
1018 浏览
提问于 2025-04-16 04:52

我该怎么查找列表中的所有元素,确保它们完全符合我的要求呢?比如,我想确认下面这个列表里只包含'a'、'b'和'c',没有多也没有少。

lst=['a', 'b', 'c']

我这样做了:

if 'a' in lst and 'b' in lst and 'c' in lst:
   #do something

非常感谢!

3 个回答

1

使用集合是解决这个问题的好方法:在第一个例子中,这两个列表是完全一样的,里面的元素一模一样,没有多也没有少。而在第二个例子中,它们就不一样了,这个差别很明显。你可以用这种方式来达到你的目的。

>>> lst=['a', 'b', 'c']
>>> listtocheck = ['a', 'b', 'c']
>>> s1 = set(lst)
>>> s2 = set(listtocheck)
>>> k = s1 ^ s2
>>> k
set([])
>>> listtocheck = ['a', 'b', 'c', 'd']
>>> s2 = set(listtocheck)
>>> k = s1 ^ s2
>>> k
set(['d'])
>>> 
1

这确实是有效的。你为什么觉得它不行呢?

另外,你知道Python中的集合吗?

http://docs.python.org/library/sets.html

6

你可以先把两个列表排序,然后直接比较它们:sorted( list_one ) == sorted( list_two )

另外,你也可以把这两个列表转换成集合(set)来比较。不过要注意,集合会去掉重复的元素!所以用这个方法比较时要用:set( list_one ) == set( list_two )

集合还可以告诉你哪个集合缺少哪些元素:set(list_one) ^ set(list_two)

下面是一些例子:

>>> sorted("asd") == sorted("dsa")
True
>>> sorted( "asd" ) == sorted( "dsa" )
True
>>> sorted( "asd" ) == sorted( "dsaf" )
False
>>> set( "asd" ) == set( "dasf" )
False
>>> set( "asd" ) == set( "daas" )
True
>>> set( "asd" ) ^ set( "daf" )
set(['s', 'f'])

撰写回答