将参数列表与自身进行比较?
这个问题有点奇怪,不过我需要一个字符串的列表,我想确保这个列表里的每个字符串都是一样的。
比如:
a = ['foo', 'foo', 'boo'] #not valid
b = ['foo', 'foo', 'foo'] #valid
有什么好的方法来做到这一点吗?
顺便说一下,我不知道这个列表里会有多少个字符串。而且这个问题其实很简单,只是我现在太累了,思维有点混乱。
7 个回答
3
供你参考。这是对不同大小的输入列表进行的测试,进行了5000次的匹配和不匹配版本的测试。
List Size 10
0.00530 aList.count(aList[0] ) == len(aList)
0.00699 for with return False if no match found.
0.00892 aList == [aList[0]] * len(aList)
0.00974 len(set(aList)) == 1
0.02334 all(aList[0] == x for x in aList)
0.02693 reduce(lambda x,y:x==y and x,aList)
List Size 100
0.01547 aList.count(aList[0] ) == len(aList)
0.01623 aList == [aList[0]] * len(aList)
0.03525 for with return False if no match found.
0.05122 len(set(aList)) == 1
0.08079 all(aList[0] == x for x in aList)
0.22797 reduce(lambda x,y:x==y and x,aList)
List Size 1000
0.09198 aList == [aList[0]] * len(aList)
0.11862 aList.count(aList[0] ) == len(aList)
0.31874 for with return False if no match found.
0.36145 len(set(aList)) == 1
0.65861 all(aList[0] == x for x in aList)
2.24386 reduce(lambda x,y:x==y and x,aList)
结果非常明显,有明显的赢家和输家。数量规则。
这里有一个快速退出的版本,运行得很快,但不是一行代码就能写完的。
def quickExit( aList ):
"""for with return False if no match found."""
value= aList[0]
for x in aList:
if x != value: return False
return True
5
也许
all(a[0] == x for x in a)
是最容易理解的写法。
5
可以用 list.count 来计算列表中有多少个项目和某个值相同。如果这个数量和列表中的总项目数不一样,那就说明它们并不全是一样的。
if a.count( "foo" ) != len(a)
这段代码看起来会是这样的...
if a.count( a[0] ) != len(a)
...在实际使用的代码中。