我想找到一种方法来查找列表中的哪个元素不是""
例如,为此:
['','','b']
它应返回2
,因为"b"
的索引为2
答案 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))