检查列表中是否至少有一个值不是特定值

时间:2017-04-05 03:18:51

标签: python arrays python-3.x python-3.5

我想找到一种方法来查找列表中的哪个元素不是""
例如,为此:
['','','b']
它应返回2,因为"b"的索引为2

4 个答案:

答案 0 :(得分:1)

一种不错的快速方法可以next()enumerate()generator expression一起使用{/ p>

next(index for index,item in enumerate(mylist) if item != '')

这非常有效;一旦找到匹配就停止检查。如果列表中的所有内容都是'',则会抛出StopIteration异常。如果您想要一个默认值,比如-1:

next((index for index,item in enumerate(mylist) if item != ''), -1)

答案 1 :(得分:0)

您可以使用简单的for循环并检查值是否为''然后将值的索引保存在列表解析中以解决您的问题

test = ['','','b'] 
print([test.index(x) for x in test if x != ''][0]) # output 2

答案 2 :(得分:0)

以下使用enumerate将每个元素绑定到数字索引,然后我们将数组过滤为非空字符串。

如果您想要所有实例:

test = ['','','b'] 
print(filter(lambda a: a[1] != "", enumerate(test)))

返回

[(2, 'b')]

如果您只想要第一个实例:

test = ['','','b'] 
print(filter(lambda a: a[1] != "", enumerate(test))[0][0])

如果需要所有实例的列表:

test = ['','','b'] 
print([ele[0] for ele in filter(lambda a: a[1] != "", enumerate(test))])

答案 3 :(得分:0)

所有其他答案看起来都很简洁,但即使第一个元素不是'',它也会遍历整个列表。如果你只需要第一个不是''的元素,我认为你应该使用一个简单的for循环。

def function(a,k):
    for i, j in enumerate(a):
        if j != k:
            return i

a = ['','','b']
k=''
print(function(a,k))