查看列表中的所有项目是否=某个字符串

时间:2013-08-25 23:05:47

标签: python

如果我有一个给定字符串列表'hello':

,我该如何找到
x = ['hello', 'hello', 'hello']
# evaluates to True

x = ['hello', '1']
# evaluates to False

5 个答案:

答案 0 :(得分:14)

使用all() function测试所有元素的条件是否为True

all(el == 'hello' for el in x)

all()函数采用可迭代(逐个产生结果的东西),并且如果所有这些元素都为真,则只返回True。 False并且不再往前看。

这里的iterable是一个生成器表达式,它对输入序列中的每个元素执行相等性测试。 all()如果遇到错误值则停止提前迭代的事实使得此测试非常有效,如果包含的生成器表达式中的测试在早期对任何元素都为False。

请注意,如果x 为空,则all()会返回True 以及,因为它找不到任何元素在空序列中是假的。您可以测试序列是非空的 first

if x and all(el == 'hello' for el in x):

解决这个问题。

答案 1 :(得分:5)

这应该有效:

# First check to make sure 'x' isn't empty, then use the 'all' built-in
if x and all(y=='hello' for y in x):

关于all内置的好处是它在找到的第一个不符合条件的项目上停止。这意味着使用大型列表非常有效。

此外,如果列表中的所有项都是字符串,那么您可以使用字符串的lower方法来匹配“HellO”,“hELLO”等内容。

if x and all(y.lower()=='hello' for y in x):

答案 2 :(得分:2)

另一种做你想做的事情的方法(all是最惯用的方式,正如所有其他答案所指出的那样),如果您需要多次检查,则非常有用:

s = set(l)
cond = (len(s) == 1) and (item in s)

每次要检查条件时,有助于避免O(n)遍历。

答案 3 :(得分:1)

使用filter和len很容易。

x = ['hello', 'hello', 'hello']
s = 'hello'
print len(filter(lambda i:i==s, x))==len(x)

答案 4 :(得分:1)

你可以使用set

来做到这一点
set(x) == {'hello'}